Ponieważ typ integralny niekoniecznie musi zawierać takie same wartości całkowite jak float
lub 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;
}
wyjścia (na moim architektury x86_64)
3.40282e+38
-9223372036854775808
Dodatkowo, wartości zmiennoprzecinkowych może pomieścić NaN, + Inf, a -Inf, z których wszystkie są zachowane przez operację floor()
. Żadna z tych wartości nie może być reprezentowana przez typ integralny.
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;
}
wyjścia
nan
inf
-inf
prawdopodobnie z tego samego powodu, [Tag: C]. – Johnsyweb
powiązane: http://stackoverflow.com/questions/511921/why-does-math-floor-return--double –
Jaki jest twój praktyczny problem z programowaniem? Czy potrzebujesz wersji 'floor', która zwraca int? –