劇多
首頁
資訊
體育
娛樂
汽車
投資
財經
軍事
科技
數碼
科學
遊戲
歷史
健康
政治
影視
旅遊
育兒
美食
時尚
房產
農業
社會
文化
教育
技術
美文
情感
故事
家居
職場
自然
闢謠
心理
攝影
漫畫
生活
其它
Club
Tips
熱門話題
搜尋
註冊
登入
首頁
>
Club
>
傾、我所有
2021-01-26 16:47
或如何判斷這個double型別的數字是有小數還是沒有?
9
回覆列表
1 # 使用者5400346714740
很簡單,從二進位制角度考慮問題即可:把「0.1」轉成二進位制的表示,然後還原成十進位制,就能看出問題。一、把 0.1 轉成二進位制表示
我們知道 DEC(1) 就是 BIN(1),但是 DEC(0.1) 怎麼轉換成二進位制?對了!用除法:0.1 = 1 ÷ 10很簡單,二進位制就是要算1 ÷ 1010我們回到小學的課堂,來列豎式吧:相信上過小學的你一定會發現,除不盡,除出了一個無限迴圈小數:二進位制的 0.0001100110011...二、舍入我們得把 0.0001100110011... 放進一個 double「雙精度浮點數」裡面雙精度浮點數能表示多少精度呢?檢視文件會發現:半精度(16bit):11 位有效數字單精度(32bit):24 位有效數字雙精度(64bit):53 位有效數字四精度(128bit):113 位有效數字好吧,雙精度是 53 位有效數字方便起見,我在第 53 個有效數字後面加了個空格。那麼問題來了:十進位制數我們可以四捨五入,二進位制怎麼辦?精神是一樣的:待處理部分有沒有達到前一位的一半,達到就進位,沒達到就捨去。(暫且當作 0 舍 1 入。)那麼我們的 0.1 在 double 中就是而 1.1 就是三、加法這個很簡單,1.1 + 0.1 就是因為結果仍然是 double,需要再做一次保留 53 位有效數字和舍入:四、結果好了,終於可以回到十進位制的世界了,我們把最終結果轉換回來:得到十進位制的:一般的輸出函式,在輸出浮點數時,都會限制顯示的有效數字,即會再做一次四捨五入。題目中的 1.2000000000000002 是這個結果在顯示時四捨五入後的結果。---正經答題:1.2000000000000002 的原理上面已經一步步分析了。至於各個語言之間的差異,答案是可能會有,比如可能因為選擇的舍入規則的不同可能導致的結果的不同;甚至有可能某個語言裡的浮點數壓根不是 IEEE 754 的浮點數,而是以字串方式儲存的,所以可能沒有誤差。
發表回復
∧
中秋節和大豐收的關聯?
∨
如何利用針刺療法來治療脫髮?
熱門排行
對方把你的朋友圈隱蔽了怎麼看?
穿裙子顯肚臍眼怎麼辦?
清落男主第幾集受傷?
死掉的梭子蟹最佳吃法?
春遊後的溫馨提示?
冷媒低壓太低或太高是什麼原因?
死水門怎麼空中釋放螺旋丸?
夏至會不會下雨?
怎麼知道巔峰極速是什麼賬號登錄的?
調質廠是做什麼的?
很簡單,從二進位制角度考慮問題即可:把「0.1」轉成二進位制的表示,然後還原成十進位制,就能看出問題。一、把 0.1 轉成二進位制表示
我們知道 DEC(1) 就是 BIN(1),但是 DEC(0.1) 怎麼轉換成二進位制?對了!用除法:0.1 = 1 ÷ 10很簡單,二進位制就是要算1 ÷ 1010我們回到小學的課堂,來列豎式吧:相信上過小學的你一定會發現,除不盡,除出了一個無限迴圈小數:二進位制的 0.0001100110011...二、舍入我們得把 0.0001100110011... 放進一個 double「雙精度浮點數」裡面雙精度浮點數能表示多少精度呢?檢視文件會發現:半精度(16bit):11 位有效數字單精度(32bit):24 位有效數字雙精度(64bit):53 位有效數字四精度(128bit):113 位有效數字好吧,雙精度是 53 位有效數字方便起見,我在第 53 個有效數字後面加了個空格。那麼問題來了:十進位制數我們可以四捨五入,二進位制怎麼辦?精神是一樣的:待處理部分有沒有達到前一位的一半,達到就進位,沒達到就捨去。(暫且當作 0 舍 1 入。)那麼我們的 0.1 在 double 中就是而 1.1 就是三、加法這個很簡單,1.1 + 0.1 就是因為結果仍然是 double,需要再做一次保留 53 位有效數字和舍入:四、結果好了,終於可以回到十進位制的世界了,我們把最終結果轉換回來:得到十進位制的:一般的輸出函式,在輸出浮點數時,都會限制顯示的有效數字,即會再做一次四捨五入。題目中的 1.2000000000000002 是這個結果在顯示時四捨五入後的結果。---正經答題:1.2000000000000002 的原理上面已經一步步分析了。至於各個語言之間的差異,答案是可能會有,比如可能因為選擇的舍入規則的不同可能導致的結果的不同;甚至有可能某個語言裡的浮點數壓根不是 IEEE 754 的浮點數,而是以字串方式儲存的,所以可能沒有誤差。