Division 1 / n always returns 0.0

I am trying to calculate p1 = (1/1) (1/2) ... * (1 / n), but something is wrong and printf gives me 0.000 ... 0

#include <stdio.h> 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; } 
+4
source share
3 answers
 (1/i) 

i is int , so this is integer division, resulting in 0 if i > 1 . Use 1.0/i to get floating point division.

+13
source

1 is an integer, i is an integer. Thus, 1/i will be an integer, i.e. the result will be truncated. To perform floating point division, one of the operands must be of type float (or, better, of type double ):

 p3 *= 1. / i; 
+6
source

I had the same problem. The main case:

  • when you want to get a float output from two integers, you need to convert one to 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

+2
source

Source: https://habr.com/ru/post/1445325/


All Articles