2013-03-11 67 views
22

剛纔我偶然發現,C++函數floor返回的是你傳遞給它的相同類型,比如float,double或者其他。爲什麼floor不返回一個整數?

根據this reference,該函數返回一個下舍入的整數值。爲什麼不是一個整數?

+0

推測出於同樣的原因爲[標籤:C]。 – Johnsyweb 2013-03-11 20:42:11

+2

相關:http://stackoverflow.com/questions/511921/why-does-math-floor-return-a-double – 2013-03-11 20:43:04

+0

你的實際編程問題是什麼?你需要一個返回int的'floor'版本嗎? – 2013-03-11 20:44:03

回答

45

因爲積分類型不一定與floatdouble保持相同的積分值。

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; 
} 

輸出

​​
+0

+1。 – Johnsyweb 2013-03-11 20:43:28

+5

這個答案比僞裝中接受的答案要好。 – Omnifarious 2013-03-11 20:52:18

相關問題