Dividing 1/n always returns 0.0

17,462

Solution 1

(1/i)

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

Solution 2

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

p3 *= 1. / i;

Solution 3

I had the same issue. The basic case:

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

Share:
17,462
user1809300
Author by

user1809300

Updated on August 12, 2022

Comments

  • user1809300
    user1809300 over 1 year

    I am trying to calculate p1=(1/1)*(1/2)*...*(1/n) but something is wrong and the 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;
    }