剛纔我偶然發現,C++函數floor
返回的是你傳遞給它的相同類型,比如float
,double
或者其他。爲什麼floor不返回一個整數?
根據this reference,該函數返回一個下舍入的整數值。爲什麼不是一個整數?
剛纔我偶然發現,C++函數floor
返回的是你傳遞給它的相同類型,比如float
,double
或者其他。爲什麼floor不返回一個整數?
根據this reference,該函數返回一個下舍入的整數值。爲什麼不是一個整數?
因爲積分類型不一定與float
或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;
}
輸出
+1。 – Johnsyweb 2013-03-11 20:43:28
這個答案比僞裝中接受的答案要好。 – Omnifarious 2013-03-11 20:52:18
推測出於同樣的原因爲[標籤:C]。 – Johnsyweb 2013-03-11 20:42:11
相關:http://stackoverflow.com/questions/511921/why-does-math-floor-return-a-double – 2013-03-11 20:43:04
你的實際編程問題是什麼?你需要一個返回int的'floor'版本嗎? – 2013-03-11 20:44:03