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

為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……

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

 打開(kāi)你的 Python,輸入「0.1+0.2=」,結(jié)果是多少?0.30000000000000004 對(duì)不對(duì)?為什么結(jié)果不是 0.3?本文作者給出了詳細(xì)的解釋。

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

 

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

 

為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……

 

Stack Overflow 界面圖像。

 

 

經(jīng)過(guò)大量的研究和數(shù)學(xué)運(yùn)算后,我得出結(jié)論,這不是錯(cuò)誤。這是數(shù)學(xué)運(yùn)算中的浮點(diǎn)運(yùn)算。讓我們進(jìn)一步了解內(nèi)在機(jī)制。

 

 

問(wèn)題描述: 為什么 0.1 + 0.2 = 0.30000000000000004?

 

 

如果你用 Java 或 C 語(yǔ)言編過(guò)程,那你一定知道用于存儲(chǔ)值的不同數(shù)據(jù)類(lèi)型。我們?cè)谇懊娴挠懻撝袑⒖紤]兩種數(shù)據(jù)類(lèi)型:整數(shù)型和浮點(diǎn)型。

 

 

整數(shù)型存儲(chǔ)整數(shù),而浮點(diǎn)型存儲(chǔ)小數(shù)。

 

 

在這之前,我們先來(lái)了解一個(gè)小概念:為了實(shí)現(xiàn)計(jì)算,數(shù)字是如何表示的?極小數(shù)和極大數(shù)通常用科學(xué)計(jì)數(shù)法表示,即:
 
為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……

 

 

同樣,如果一個(gè)用科學(xué)計(jì)數(shù)法書(shū)寫(xiě)的數(shù)字小數(shù)點(diǎn)前有一個(gè)非零的十進(jìn)制數(shù),則該數(shù)字是標(biāo)準(zhǔn)化寫(xiě)法。例如,0.0005606 用科學(xué)計(jì)數(shù)法的標(biāo)準(zhǔn)化寫(xiě)法為:

 

 

為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……

 

 

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

 

 

現(xiàn)在,有兩種顯示浮點(diǎn)數(shù)的方法:單精度和雙精度。在進(jìn)行浮點(diǎn)運(yùn)算時(shí),單精度使用 32 位,而雙精度使用 64 位。

 

 

與許多其他編程語(yǔ)言不同,JavaScript 并未定義不同類(lèi)型的數(shù)字?jǐn)?shù)據(jù)類(lèi)型,而是始終遵循國(guó)際 IEEE 754 標(biāo)準(zhǔn),將數(shù)字存儲(chǔ)為雙精度浮點(diǎn)數(shù)。

 

 

這種格式以 64 位存儲(chǔ)數(shù)字,其中數(shù)字(分?jǐn)?shù))存儲(chǔ)在位 0 到 51 中,指數(shù)存儲(chǔ)在位 52 到 62 中,符號(hào)存儲(chǔ)在位 63 中。

 

 

為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……

 

IEEE754 雙精度標(biāo)準(zhǔn)。

 

 

我們按 IEEE754 標(biāo)準(zhǔn)用 64 位表示 0.1。第一步是將十進(jìn)制的 0.1 轉(zhuǎn)換為二進(jìn)制的 0.1。首先將 0.1 乘以 2,然后將小數(shù)點(diǎn)前的數(shù)字分離出來(lái),得到其相應(yīng)的二進(jìn)制數(shù)。
 
為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……

 

 

重復(fù)此操作至 64 位。然后把它們按升序排列,獲取尾數(shù),再根據(jù)雙精度標(biāo)準(zhǔn),我們將把其四舍五入到 52 位。
為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……
尾數(shù)

 

 

用科學(xué)計(jì)數(shù)法表示二進(jìn)制 0.1 并只保留前 52 位:
為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……

 

 

尾數(shù)部分處理好后。現(xiàn)在我們用下面的方式處理指數(shù):
為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……

 

 

這里,11 代表我們要使用的 64 位表示的指數(shù)位數(shù),-4 代表科學(xué)計(jì)數(shù)中的指數(shù)。

 

 

所以最終數(shù)字 0.1 的表示形式是:

 

 

 
為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……

 

 

同理,0.2 表示為:

 

 

 為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……

 

 

將兩個(gè)數(shù)相加,得到:

 

 

 為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……

 

轉(zhuǎn)換為浮點(diǎn)數(shù),它變成:
 
為什么0.1+0.2不等于0.3?原來(lái)編程語(yǔ)言是這么算的……

 

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

 

責(zé)任編輯:張燕妮 來(lái)源: 機(jī)器之心
相關(guān)推薦

2023-11-08 13:32:00

JavaScript浮點(diǎn)數(shù)計(jì)算

2025-06-04 03:25:00

Java浮點(diǎn)數(shù)數(shù)學(xué)缺陷

2024-08-23 08:43:08

2020-10-12 13:27:21

計(jì)算機(jī)瀏覽器電腦

2023-05-16 17:42:04

浮點(diǎn)加法Python

2023-06-02 13:53:56

2012-02-03 14:39:12

Java

2017-06-29 08:45:06

MySQLNOT INNOT EXISTS

2021-10-29 22:49:57

JavaScript開(kāi)發(fā)精度

2015-08-12 10:04:24

2021-09-06 15:29:16

大數(shù)據(jù)防疫信息安全

2010-04-28 14:38:26

云計(jì)算

2019-08-27 08:43:15

2010-10-18 10:51:00

蘋(píng)果

2013-01-15 09:41:45

編程語(yǔ)言

2022-07-26 23:43:29

編程語(yǔ)言開(kāi)發(fā)Java

2019-03-15 10:55:12

通信系統(tǒng)手機(jī)

2023-03-07 07:45:28

2011-08-08 09:59:35

Android

2022-05-13 23:35:19

Java編程語(yǔ)言開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲香蕉| 国产九一精品 | 欧美精品久久久 | 日韩精品一区二区三区在线播放 | 91久久国产| 国产精品国产a级 | 亚洲精品电影网在线观看 | 国产精品99久久久久久动医院 | 久久久久久成人 | 9久久精品 | 亚洲黄色片免费观看 | 国产99免费视频 | 中文字幕日韩欧美一区二区三区 | 亚洲国产欧美在线人成 | 一区二区三区在线观看视频 | 日韩在线成人 | 天天操网 | 亚洲一区二区 | 精品不卡 | 精品一区二区三区在线视频 | 亚洲精品久久久久avwww潮水 | 欧美日韩在线一区二区 | 国产精品国产成人国产三级 | 国产剧情一区 | 99久久婷婷国产综合精品电影 | 欧美精品一区二区三区在线 | 欧美一区二区视频 | 国产伦精品一区二区三区视频金莲 | 91社区在线观看播放 | 午夜影院在线观看 | 一区二区三区四区免费观看 | 国产一区二区在线免费观看 | 1000部精品久久久久久久久 | 欧美亚洲另类丝袜综合网动图 | 欧美黄a| 久久av网 | 日韩免费 | 色播视频在线观看 | 日韩欧美在线观看 | 国产精品视频一二三区 | 久热m3u8|