那些7位有效數字后錯誤的數是怎么來的?
uj5u.com熱心網友回復:
那不是錯誤, 是不能精確表達float的有效數字只有6~7位, double的有效數字是15~16位
浮點數和整數不一樣, 整數在整數表達范圍內每一個數字都能精確表達
浮點數就是你看到的那個結果, 1234567890,float的 前6位是有效數字,后面的是近似數字
這個不是截斷
uj5u.com熱心網友回復:
你想想數的二進制表示小數點前每位表示1 2 4 8 16
小數點后呢, 每位表示0.5 0.25,0.125, 0.0625, 0.03125,.....
有限的數位,無法精確表達每個小數的,只能是近似
uj5u.com熱心網友回復:
float精度不夠,除錯時檢測下即知uj5u.com熱心網友回復:
用%.20f顯示2.2-2.1不等于0.1,電腦硬體是這樣的,編程語言無能為力啊。uj5u.com熱心網友回復:
可以看一下我早年寫到一篇博客https://blog.csdn.net/happy__888/article/details/277587
float按照IEEE格式的規定,表示小數部分的有23bits
意味著只有2^23個浮點數可以被精確的表示,此外的都只能是近似了
2^23貌似很大, 但是實際上它也只是有理數當中的一部分而已, 無理數的數量和有理數完全不是一個量級的,遠遠比有理數多
uj5u.com熱心網友回復:
那截斷是什么情況?
關于這方面可以從哪了解,書上好像都沒有。
uj5u.com熱心網友回復:
截斷是 int n = 1.234;這是截斷, 把小數點后面的都砍沒了
這種知識書上也是有的, 看看數的二進制表示方式吧, 可能沒有講到那么細,但是肯定會提到float型別的表示范圍和有效數字的事兒
編程書和其他的書不太一樣的地方就是, 除了書上都示范代碼,別的地方都是重點

代碼反而是用來解釋哪些文字的說明, 是讓你理解哪些文字的
但是初學者往往會忽略這點, 只盯著示范代碼看, 那就搞錯了方向啦
uj5u.com熱心網友回復:
受教了,感謝??
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/117317.html
標籤:C語言
上一篇:c++檔案輸入輸出
下一篇:為什么運行不起來?
