Diferenças no resultado arredondado ao chamar pow ()
OK, eu sei que houve muitas perguntas sobre a função pow e lançar o resultado para int, mas não consegui encontrar uma resposta para essa pergunta um pouco específica.
OK, este é o código 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;
}
E esta é a saída: "25 25 24 25". Observe que apenas no terceiro caso em que argumentos para pow não são literais, temos esse resultado incorreto, provavelmente causado por erros de arredondamento. A mesma coisa é feliz sem elenco explícito. Alguém poderia explicar o que acontece nesses quatro casos?
Eu estou usando CodeBlocks no Windows 7 e MinGW gcc compilador que veio com ele.