J’essaie de calculer p1=(1/1)*(1/2)*...*(1/n)
mais quelque chose ne va pas et le printf
me donne 0.000...0
#include int main(void) { int i,num; float p3; do { printf ("give number N>3 : \n" ); scanf( "%d", &num ); } while( num <= 3 ); i = 1; p3 = 1; do { p3=p3*(1/i); printf( "%f\n",p3 ); } while ( i <= num ); printf("\nP3=%f",p3); return 0; }
(1/i)
i
est un int
, donc c’est la division entière, résultant en 0 si i > 1
. Utilisez 1.0/i
pour obtenir la division en virgule flottante.
1
est un entier, i
est un entier. Donc, 1/i
sera un entier, c’est -à- dire que le résultat sera tronqué. Pour effectuer la division en virgule flottante, l’un des opérandes doit être de type float
(ou, mieux, de type double
):
p3 *= 1. / i;
J’ai eu le même problème. Le cas de base:
lorsque vous souhaitez obtenir une sortie float à partir de deux entiers, vous devez en convertir un en float
int c = 15; int b = 8; printf("result is float %f\n", c / (float) b); // result is float 1.875000 printf("result is float %f\n", (float) c / b); // result is float 1.875000