成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么0.1+0.2不等于0.3?原來編程語言是這么算的……

新聞 前端
打開你的 Python,輸入「0.1+0.2=」,結果是多少?0.30000000000000004 對不對?為什么結果不是 0.3?本文作者給出了詳細的解釋。

 打開你的 Python,輸入「0.1+0.2=」,結果是多少?0.30000000000000004 對不對?為什么結果不是 0.3?本文作者給出了詳細的解釋。

從小我們就知道 0.1 + 0.2=0.3。但是,在光怪陸離的計算世界中,運算方式卻大相徑庭。

 

我最近開始用 JavaScript 進行編碼,在閱讀數據類型時,我注意到 0.1 + 0.2 不等于 0.3 的奇怪行為。我向 Stack Overflow 尋求幫助,在上面找到了一些有用的帖子。如下圖所示:

 

為什么0.1+0.2不等于0.3?原來編程語言是這么算的……

 

Stack Overflow 界面圖像。

 

 

經過大量的研究和數學運算后,我得出結論,這不是錯誤。這是數學運算中的浮點運算。讓我們進一步了解內在機制。

 

 

問題描述: 為什么 0.1 + 0.2 = 0.30000000000000004?

 

 

如果你用 Java 或 C 語言編過程,那你一定知道用于存儲值的不同數據類型。我們在前面的討論中將考慮兩種數據類型:整數型和浮點型。

 

 

整數型存儲整數,而浮點型存儲小數。

 

 

在這之前,我們先來了解一個小概念:為了實現計算,數字是如何表示的?極小數和極大數通常用科學計數法表示,即:
 
為什么0.1+0.2不等于0.3?原來編程語言是這么算的……

 

 

同樣,如果一個用科學計數法書寫的數字小數點前有一個非零的十進制數,則該數字是標準化寫法。例如,0.0005606 用科學計數法的標準化寫法為:

 

 

為什么0.1+0.2不等于0.3?原來編程語言是這么算的……

 

 

Significant 是指不包含零的有效數字,base 表示所使用的進制——此處為十進制(10)。Exponent(指數)表示小數點需要向左或向右移動的步數。

 

 

現在,有兩種顯示浮點數的方法:單精度和雙精度。在進行浮點運算時,單精度使用 32 位,而雙精度使用 64 位。

 

 

與許多其他編程語言不同,JavaScript 并未定義不同類型的數字數據類型,而是始終遵循國際 IEEE 754 標準,將數字存儲為雙精度浮點數。

 

 

這種格式以 64 位存儲數字,其中數字(分數)存儲在位 0 到 51 中,指數存儲在位 52 到 62 中,符號存儲在位 63 中。

 

 

為什么0.1+0.2不等于0.3?原來編程語言是這么算的……

 

IEEE754 雙精度標準。

 

 

我們按 IEEE754 標準用 64 位表示 0.1。第一步是將十進制的 0.1 轉換為二進制的 0.1。首先將 0.1 乘以 2,然后將小數點前的數字分離出來,得到其相應的二進制數。
 
為什么0.1+0.2不等于0.3?原來編程語言是這么算的……

 

 

重復此操作至 64 位。然后把它們按升序排列,獲取尾數,再根據雙精度標準,我們將把其四舍五入到 52 位。
為什么0.1+0.2不等于0.3?原來編程語言是這么算的……
尾數

 

 

用科學計數法表示二進制 0.1 并只保留前 52 位:
為什么0.1+0.2不等于0.3?原來編程語言是這么算的……

 

 

尾數部分處理好后。現在我們用下面的方式處理指數:
為什么0.1+0.2不等于0.3?原來編程語言是這么算的……

 

 

這里,11 代表我們要使用的 64 位表示的指數位數,-4 代表科學計數中的指數。

 

 

所以最終數字 0.1 的表示形式是:

 

 

 
為什么0.1+0.2不等于0.3?原來編程語言是這么算的……

 

 

同理,0.2 表示為:

 

 

 為什么0.1+0.2不等于0.3?原來編程語言是這么算的……

 

 

將兩個數相加,得到:

 

 

 為什么0.1+0.2不等于0.3?原來編程語言是這么算的……

 

轉換為浮點數,它變成:
 
為什么0.1+0.2不等于0.3?原來編程語言是這么算的……

 

這就是 0.1 + 0.2 = 0.30000000000000004 的原因。

 

責任編輯:張燕妮 來源: 機器之心
相關推薦

2023-11-08 13:32:00

JavaScript浮點數計算

2025-06-04 03:25:00

Java浮點數數學缺陷

2024-08-23 08:43:08

2020-10-12 13:27:21

計算機瀏覽器電腦

2023-05-16 17:42:04

浮點加法Python

2023-06-02 13:53:56

2012-02-03 14:39:12

Java

2021-10-29 22:49:57

JavaScript開發精度

2017-06-29 08:45:06

MySQLNOT INNOT EXISTS

2015-08-12 10:04:24

2021-09-06 15:29:16

大數據防疫信息安全

2010-04-28 14:38:26

云計算

2019-08-27 08:43:15

2010-10-18 10:51:00

蘋果

2013-01-15 09:41:45

編程語言

2022-07-26 23:43:29

編程語言開發Java

2019-03-15 10:55:12

通信系統手機

2023-03-07 07:45:28

2011-08-08 09:59:35

Android

2020-04-26 12:08:10

Python編程語言開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色婷综合网 | 久久久久久免费毛片精品 | www久久99 | 日韩最新网站 | 亚洲最新网址 | 在线免费观看成年人视频 | 成人小视频在线观看 | 欧美日韩在线一区 | 国产在线看片 | 成人精品国产免费网站 | 久草在线 | 午夜无码国产理论在线 | av在线播放不卡 | 国产成人免费网站 | 久久久久久久一区二区 | 精品国产91亚洲一区二区三区www | 久久久www成人免费无遮挡大片 | 亚洲一区二区三区国产 | 国产日产久久高清欧美一区 | 免费成人国产 | 欧州一区二区三区 | 日韩在线| 另类二区 | 看羞羞视频免费 | 欧美在线国产精品 | 自拍偷拍一区二区三区 | 91一区二区三区在线观看 | 五月激情综合 | 中文字幕国 | 伊人av在线播放 | 久久精品在线免费视频 | 亚洲91视频| 99精品国产一区二区三区 | 网址黄 | 久久免费精品视频 | 久久草在线视频 | 全部免费毛片在线播放网站 | 日韩三片 | 成人av资源在线 | 午夜电影网站 | 久久99精品久久久久蜜桃tv |