Деление 1/n всегда возвращает 0.0
Я пытаюсь посчитать p1=(1/1)*(1/2)*...*(1/n)
но что-то не так и printf
дает мне 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;
}
3 ответа
(1/i)
i
является int
, так что это целочисленное деление, в результате 0, если i > 1
, использование 1.0/i
чтобы получить деление с плавающей запятой.
1
является целым числом, i
является целым числом Так 1/i
будет целым числом, т.е. результат будет усечен. Для выполнения деления с плавающей запятой один из операндов должен быть типа float
(или лучше типа double
):
p3 *= 1. / i;
Я была такая же проблема. Основной случай:
если вы хотите получить результат с плавающей запятой из двух целых чисел, вам нужно преобразовать одно в число с плавающей запятой
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