ちょうど今、C ++関数floor
が、渡したのと同じ型を返すという事実に出くわしましfloat
たdouble
。
このリファレンスによると、関数は切り捨てられた整数値を返します。なぜこれは整数ではないのですか?
整数型は必ずしも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