Vì loại tích phân không nhất thiết có thể giữ cùng giá trị tích phân như float
hoặc 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;
}
kết quả đầu ra (trên kiến trúc x86_64 của tôi)
3.40282e+38
-9223372036854775808
Bên cạnh đó, các giá trị dấu chấm động có thể giữ NaN, + Inf, và -INF, tất cả đều được bảo quản bằng một thao tác floor()
. Không có giá trị nào trong số này có thể được biểu diễn bằng một loại tích phân.
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;
}
đầu ra
nan
inf
-inf
Nguồn
2013-03-11 20:40:51
Có lẽ vì lý do tương tự như [tag: c]. – Johnsyweb
liên quan: http://stackoverflow.com/questions/511921/why-does-math-floor-return-a-double –
Vấn đề lập trình thực tế của bạn là gì? Bạn có cần phiên bản 'tầng' trả về một int không? –