En C (y por lo tanto también en Objective-C), las expresiones casi siempre se evalúan sin tener en cuenta el contexto en el que aparecen.
La expresión 1/120
es una división de dos operandos int
, por lo que arroja un resultado de int
. La división entera trunca, por lo 1/120
produce 0
. Se evalúa el hecho de que el resultado se utiliza para inicializar un objeto float
no cambia la forma en 1/120
.
Esto puede ser contrario a la intuición, a veces, sobre todo si estás acostumbrado a la forma general calculadoras trabajar (que suelen almacenar todos los resultados en coma flotante).
Como han dicho las otras respuestas, para obtener un resultado cercano a 0.00833 (que no puede representarse exactamente, BTW), necesita hacer una división de coma flotante en lugar de una división entera, haciendo una o ambas de los operandos punto flotante. Si un operando es flotante y el otro es un entero, el operando entero se convierte primero a punto flotante; no hay punto flotante directo por operación de división entera.
Tenga en cuenta que, como dice @ 0x8badf00d de comentario, el resultado debería ser 0
. Otra cosa que debe estar pasando mal para el resultado impreso para ser inf
. Si puede mostrarnos más código, preferiblemente un pequeño programa completo, podemos ayudarlo a resolverlo.
(Hay idiomas en los que la división entera produce un resultado de coma flotante. Incluso en esos idiomas, la evaluación no se ve necesariamente afectada por su contexto. Python versión 3 es uno de esos idiomas; C, Objective-C, y Python versión 2 no lo son.)
¿Cómo se imprime un valor flotante a la consola? A menos que esté imprimiendo NSLog (@ "inf"); o printf ("inf"); no puede obtener inf impreso en la consola. – 0x8badf00d
@ 0x8badf00d: Sí, usted (probablemente) puede: 'printf ("% g \ n", 1.0/0.0);' –