#include <stdio.h>
#include <math.h>
int main()
{
int i = 11;
printf("%d ^ 2 = %d\n",i,(int)pow(i,2));
getchar();
return 0;
}
В этом случае вместо 121 я получаю 120. Какую ошибку я делаю? (Мне действительно нужно напечатать pow(i,2) как int.)
#include <stdio.h>
#include <math.h>
int main()
{
int i = 11;
printf("%d ^ 2 = %d\n",i,(int)pow(i,2));
getchar();
return 0;
}
В этом случае вместо 121 я получаю 120. Какую ошибку я делаю? (Мне действительно нужно напечатать pow(i,2) как int.)
Приведение к целому числу усекает дробь, возможно, pow
вернуло что-то вроде 120,99999998 или около того...
Не выполняйте приведение к (int)
и используйте формат %g вместо %d для печати double
результата pow()
.
Это связано с округлением от double до int.
Поскольку мощность постоянна, зачем иметь накладные расходы.
Придерживайтесь
printf("%d ^ 2 = %d\n",i, i*i);
math.h
с плавающей запятой, если вам нужнаint
арифметика? - person mouviciel   schedule 11.04.2014pow()
вернет ожидаемое 121. OP имеет математическая библиотека Schlocky. - person chux - Reinstate Monica   schedule 11.04.2014