Подтвердить что ты не робот

Почему пол не возвращает целое число?

Как раз сейчас я наткнулся на то, что функция С++ floor возвращает тот же тип, который вы передаете ему, будь то float, double или такой.

В соответствии с этой ссылкой функция возвращает округленное целочисленное значение. Почему это не целое число?

4b9b3361

Ответ 1

Поскольку интегральный тип не может содержать те же интегральные значения, что и float или double.

int main(int argc, char *argv[]) {
    std::cout << floor(std::numeric_limits<float>::max()) << std::endl;
    std::cout << static_cast<long>(floor(std::numeric_limits<float>::max())) << ::endl;
}

(на моей архитектуре x86_64)

3.40282e+38
-9223372036854775808

Кроме того, значения с плавающей запятой могут содержать NaN, + Inf и -Inf, все из которых сохраняются при операции floor(). Ни одно из этих значений не может быть представлено интегральным типом.

int main(int argc, char *argv[]) {
    std::cout << floor(std::numeric_limits<float>::quiet_NaN()) << std::endl;
    std::cout << floor(std::numeric_limits<float>::infinity()) << std::endl;
    std::cout << floor(-std::numeric_limits<float>::infinity()) << std::endl;
}

выходы

nan
inf
-inf