c語言double的精確問題?

小數的的二進位不是無限位的嗎

按理說double也不可能精確啊

為什麼double可以yes?float卻no?


1.1 是 double 類型的字面量,1.1f 才是 float 類型的字面量。

因為 1.1 以二進位表示是循環小數,因此 1.1 != 1.1f。

第一個程序改為 1.1f 就會 yes 了。


小數在不能用二進位位精確表示的時候確實是無限位的,但也是理論上的。想想有限內存也不能讓你有無限啊!所以小數在標準中,一直強調的是有效位範圍,而不像整數強調最小最大值的範圍。所以只要在精確範圍內有效位相等就是true

你這個demo干擾是1.1字面值是double,而你變數對象時而double時而float


默認情況下,C語言浮點數的字面值是double。如果你將本例中的的1.1換做1.1f,結果就完全相反了。


推薦閱讀:

Python什麼情況下會生成pyc文件?
如何看待NOI奧賽編程題目只著重於演算法而不讓學生養成良好的編程習慣?
微軟開源Windows驅動程序框架和MSBuild源代碼會有什麼影響?
Linux下調用pthread庫創建的線程是屬於用戶級線程還是內核級線程?求大神指教?
怎麼寫規範、風格良好的代碼?

TAG:演算法 | 編程 | C編程語言 | 二進位 | CC |