Компьютер (двоичная) с плавающей запятой не может точно представлять десятичные числа, точно так же, как десятичная с плавающей запятой не может представлять некоторые дроби.Например, 1/9 = .11111111111 .... Покажите больше цифр точности, и вы увидите, что произошло.
Поскольку вы не указали значение odd
, я выбрал тот, который далтот же результат:
#include <stdio.h>
int main()
{
double odd = 30.7499;
printf("%.2lf\n",odd); //(1)
printf("%.2lf\n",37.975); //(2)
printf("%.2lf\n",(odd*0.65 -1)*2); //(3)
printf("%.3lf\n",(odd*0.65 -1)*2); //(4)
printf("%.20lf\n",odd); //(1)
printf("%.20lf\n",37.975); //(2)
printf("%.20lf\n",(odd*0.65 -1)*2); //(3)
printf("%.20lf\n",(odd*0.65 -1)*2); //(4)
return 0;
}
Вывод
30.75
37.98
37.97
37.975
30.74990000000000000000
37.97500000000000100000
37.97487000000000300000
37.97487000000000300000