Различия в округленном результате при вызове pow ()
Хорошо, я знаю, что было много вопросов о функции ПУ и ее использовании.результат в int, но я не могНе могу найти ответ на этот немного конкретный вопрос.
ОК, это код C:
#include
#include
#include
int main()
{
int i = 5;
int j = 2;
double d1 = pow(i,j);
double d2 = pow(5,2);
int i1 = (int)d1;
int i2 = (int)d2;
int i3 = (int)pow(i,j);
int i4 = (int)pow(5,2);
printf("%d %d %d %d",i1,i2,i3,i4);
return 0;
}
И это вывод:25 25 24 25 ", Обратите внимание, что только в третьем случае, когда аргументы для pow не являются литералами, мы получаем неправильный результат, вероятно, вызванный ошибками округления. То же самое происходит без явного приведения. Может ли кто-нибудь объяснить, что происходит в этих четырех случаях?
Я использую CodeBlocks в Windows 7 и MinGW GCC компилятор, который поставляется с ним.