Da ein Integraltyp nicht unbedingt die gleichen Integralwerte wie float
oder double
enthalten kann.
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;
}
Ausgänge (auf meiner Architektur x86_64)
3.40282e+38
-9223372036854775808
Zusätzlich Gleitkommawerte können halten NaN, + Inf und -Inf, von denen alle durch einen floor()
Operation erhalten sind. Keiner dieser Werte kann mit einem ganzzahligen Typ dargestellt werden.
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;
}
Ausgänge
nan
inf
-inf
Vermutlich aus dem gleichen Grund wie [tag: C]. – Johnsyweb
bezogen werden: http://stackoverflow.com/questions/511921/why-does-math-floor-return-a-double –
Was ist Ihr praktisches Programmierproblem? Benötigen Sie eine Version von 'floor', die einen int zurückgibt? –