Pregunta

Dado el siguiente código ANSI C, me pregunto acerca de los resultados:

main() {
  int a = 19.4 / 9.7;               // result = 2
  float b = (int) 19.4 / (int) 9.7  // result = 2.000000, why?
  float c = (int) 9.7;              // result = 9
}

C entendí que cortará todos los decimales en la conversión a int, pero mi lógica tiene un defecto si veo la segunda línea. Si las cifras decimales eran cortados, el resultado debe ser 2,11111.

¿Cómo es la conversión de coma flotante hecho en ANSI C?

¿Fue útil?

Solución

En C estándar, los literales tales como 19.4 y 9.7 se supone que son doble a menos que especifique lo contrario (por ejemplo. 19.4F, 9.7F).

El compilador utilizar la función de división de enteros para calcular x / y (si ambos x e y son de int) tipo compatible () o la función de división en coma flotante a la computadora x / y si al menos uno de x e y son un tipo de punto flotante.

flotador b = (int) 19,4 / (int) 9.7 // resultado = 2,000000, por qué?

está solicitando 19,4 a echados a int, y 9,7 para ser echada a int, pidiendo eficazmente el compilador para calcular la división entera de 19/9 = 2, que luego es promovido a flotar para el almacenamiento en b. 2 se convierte en 2,0.

.PMCD.

Otros consejos

En la línea 2, que está convirtiendo los valores de entrada en enteros, y luego hacer una división entera (porque ambos operandos para la brecha son enteros, la brecha se realiza en el espacio entero - lo que significa cualquier resiult fraccional será truncado).

Así, 19/9 = 2

A continuación, para conseguir este entero en un flotador, que convierte implícitamente 2 volver a 2,000000

No, tiene que ser 2. Cuando se divide un entero por un entero, se obtiene un int. Por lo tanto 2. Se puede hacer el Hokey Pokey después convertirlo en lo que quiera, pero los decimales ya se han ido.

Dividir dos enteros y obtendrá un número entero. Dividir un flotador y un entero y obtendrá un flotador.

(int) 19.4 / (int) 9.7 es equivalente a 19 / 9, que primero se resuelve en 2 (un int). Sólo después de la 2 se calcula es que se convirtió en un flotador por el tipo variable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top