日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于浮点型加减乘除运算不精确的问题

發布時間:2023/12/31 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于浮点型加减乘除运算不精确的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于浮點型加減乘除運算不精確的問題

先舉一個遇到這個錯誤的項目例子:

之前做一個小模塊,由于后端接口還沒有完成,需要自己搭建node服務,返回數據,功能需求是實時更新的,這個小模塊中本人沒有使用websocket,而是使用了輪詢。

node服務關鍵代碼如下(每3秒更新一次服務端數據,數據采用增加小數的方式,也就是涉及到了浮點型的加法)

前端vue中調用數據后,發現偶爾會出現以下情況:

當時有點疑惑,搜索了很久都沒找到方法,最后是大神同事告訴我的,問題出在浮點型的運算。

只要將node服務端代碼修改以下,對浮點型長度做一下fixed就行。

重啟一下node服務(node my-server.js),然后會發現,不再出現此情況造成的bug:


那么造成浮點型運算不精確的原因是什么呢?

對于二進制小數,小數點右邊能表達的值是 1/2, 1/4, 1/8, 1/16, 1/32, 1/64, 1/128 … 1/(2^n)。所有這些小數都是一點一點的拼湊出來的一個近似的數值, 所有才會不準確的。

舉個例子, 現在用二進制來表示十進制的1.2:
1.01 = 1 + 1/4 = 1.25 , 偏大
1.001 = 1 + 1/8 = 1.125 , 偏小
1.0011 = 1 + 1/8 + 1/16 = 1.1875 , 偏小
1.001101 = 1 + 1/8+ 1/16 + 1/64 = 1.203125 , 偏大
1.0011001 = 1 + 1/8 + 1/16 + 1/128 = 1.1953125 , 偏小
1.00110011 = 1 + 1/8+1/16+1/128+1/256 = 1.19921875 , 偏小,但很接近
越來越接近……..
這就是所謂的用二進制小數沒法精確表達10進制小數的意思。

在控制臺輸入17.9*100,會得到1789.9999999999998,浮點運算是不精確的,只能無限接近。

總結

以上是生活随笔為你收集整理的关于浮点型加减乘除运算不精确的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。