Почему pow работает неверно в компиляторе MinGW

Есть примитивный код

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n = 5;
int cnt = 2;
int q = pow(n,cnt);
cout<<q;
return  0;
}

И почему то при компиляции под MinGW выводит 24, почему это так?


Ответы (1 шт):

Автор решения: joker

Потому что pow возвращает результат типа double, который может, из-за ошибок вещественных чисел оказаться, например, 24.999999999999999. Далее, т.к. тип "принимающей" переменной – int, возвращённый double будет тоже преобразован в int, а при преобразовании к int дробная часть отбрасывается, в результате чего и получается 24.

В стандарте не сказано, как именно pow должна выполнять вычисления...

→ Ссылка