Различия в округленном результате при вызове 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 компилятор, который поставляется с ним.

Ответы на вопрос(4)

Ваш ответ на вопрос