Jochen Arndt
То СТД::Пау - cppreference.com[^] функция-это функция с плавающей запятой. Таким образом, первый параметр преобразуется из int
к double
и double
затем результат преобразуется обратно в int
при возвращении с вашей функции.
Проблема со значениями с плавающей запятой заключается в том, что большинство чисел не могут быть точно представлены, что приводит к очень малым смещениям к реальному значению. Вот что произошло здесь: double
вернулся с работы. pow()
функция-это что-то вроде 14399.999999... .
Когда double
преобразуется в int
, все цифры после десятичной точки игнорируются (отсекаются). Таким образом, вы получите 14399 возвращенных. Распространенным решением, позволяющим избежать этого, является добавление смещения +/- 0,5 при литье в int
:
int squarefunction(int x)
{
// We know that the result is never negative here so that the
// sign check (subtracting 0.5 then) can be omitted
return static_cast<int>(pow(x, 2) + 0.5);
}
Обратите внимание, что я добавил приведение, чтобы избежать предупреждений компилятора о возможной потере точности.