2011-05-23 10 views
28

yo estaba trabajando en otra cosa, pero todo salió como cero, así que hice este ejemplo minimalista, y la salida sigue siendo 0.División en C no ++ funcionando como se esperaba

#include <iostream> 

int main(int argc, char** argv) 
{ 
    double f=3/5; 
    std::cout << f; 
    return 0; 
} 

¿Qué me falta?

Respuesta

45

Te estás perdiendo el hecho de que 3 y 5 son números enteros, por lo que obtendrás una división entera. Para hacer que el compilador de ejecutar un trabajo flotante de división de punto, que uno de ellos un número real:

double f = 3.0/5; 
+2

La división entera versus la coma flotante parece un rito de paso; Sé que fue para mí. – zenzelezz

9

intente esto:

double f = 3.0/5.0; 

esto debería solucionar el problema

5

Trate de poner un .0 después de una de los divisores Esto los convertirá en literales de coma flotante.

17

No necesita ser .0, también se puede hacer 3./5 o 3/5. o 3e+0/5 o 3/5e-0 o 0xCp-2/5 o ... No sólo tiene que ser un indicador involucrado para que el compilador sabe que se supone que para llevar a cabo la división como punto flotante.

Otra posibilidad: double f=double(3)/5. Eso es mucho más tipeo, pero no deja dudas sobre lo que estás haciendo.

o simplemente utilizar double f=.6, que también hace el truco ...

2

Está utilizando números enteros. Puede hacer muchas cosas para hacer que sus constantes se dupliquen, como en los estados contiguos, pero eso no es bueno. Es difícil de leer y confuso. Si quiere 3 y 5, hágalos 3.0 y 5.0. Todos sabrán a qué te refieres si se ven obligados a leer tu código. Gran parte de lo que afirma realmente requiere que conozcas C/C++ y cómo las carrozas son de almacenamiento para formar cara o cruz.

+0

¡Bien, pensé que era obvio que '0xCp-2/5' no debía tomarse realmente en serio! ... Pero en cuanto a usar 3.0: eso es una cuestión de gusto. Personalmente, odio escribirlo de esta manera, porque en la ciencia, cualquier cantidad finita de dígitos después del punto decimal sugiere algún tipo de imprecisión en los valores medidos, etc., así que cuando veo 3.0 siempre pienso en 3 ± .05 y 3.0/5.0 es .6 ± .01 para mí. ¡Eso no es doble precisión! Prefiero '3./5'. – leftaroundabout

+0

El objetivo de mi publicación fue facilitar la lectura. 3./5 no parece una ecuación matemática estándar. Necesitas conocer a tu audiencia: no creo que el póster (si tienen problemas con los diferentes de un real e int) es programación para aplicaciones científicas de alto nivel, así que sería más simple, mejor. –

Cuestiones relacionadas