29

ちょうど今、C ++関数floorが、渡したのと同じ型を返すという事実に出くわしましfloatdouble

このリファレンスによると、関数は切り捨てられた整数値を返します。なぜこれは整数ではないのですか?

4

1 に答える 1

53

整数型は必ずしもafloatまたは。と同じ整数値を保持できるとは限らないため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
于 2013-03-11T20:40:51.493 に答える