ОК, я знаю, что было много вопросов о функции pow и отбрасывании ее результата в int, но я не мог найти ответ на этот немного конкретный вопрос.Различия в округленном результате при вызове pow()
ОК, это код C:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
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 не являются литералами, мы имеем неправильный результат, вероятно, вызванный ошибками округления. То же самое происходит без явного литья. Может ли кто-нибудь объяснить, что происходит в этих четырех случаях?
Im using CodeBlocks в Windows 7 и компилятор MinGW gcc, который пришел с ним.
Что именно вы хотите объяснить точно? И 24, и 25 являются правильными ответами. Реализация делает то, что наиболее эффективно. –
Мой вывод '25 25 25 25'. Это странно. – user2448027
@ user2448027 Попробуйте отключить всю оптимизацию. – johnchen902