c語言double的精確問題?
12-31
小數的的二進位不是無限位的嗎
按理說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庫創建的線程是屬於用戶級線程還是內核級線程?求大神指教?
※怎麼寫規範、風格良好的代碼?