0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

計(jì)算機(jī)基礎(chǔ)知識(shí)之處理小數(shù)1

jf_78858299 ? 來(lái)源:前端柒八九 ? 作者:前端柒八九 ? 2023-03-31 16:10 ? 次閱讀

將0.1累加100次也得不到10

我們來(lái)一個(gè)計(jì)算機(jī)運(yùn)算錯(cuò)誤的例子。

function sum(){
    let sum = 0;
    for(let i=1;i<=100;i++){
        sum +=0.1;
    }
    console.log(sum)
}

我們?cè)跒g覽器的控制臺(tái)中,運(yùn)行sum(),得到的運(yùn)行結(jié)果為9.99999999999998。這顯然和我們的九年義務(wù)教育所教導(dǎo)的 「背道而馳」 。

有句話說(shuō), 「雪崩的時(shí)候,沒(méi)有一片雪花是無(wú)辜的」 。在這段代碼中,程序沒(méi)錯(cuò),計(jì)算機(jī)也沒(méi)有發(fā)生故障,當(dāng)然和所使用的語(yǔ)言也沒(méi)有關(guān)系(選用其他的高級(jí)語(yǔ)言可能運(yùn)算結(jié)果不同)。如果硬要找一個(gè)背鍋的,那就是 「計(jì)算機(jī)處理小數(shù)的機(jī)制」 。


用二進(jìn)制數(shù)表示小數(shù)

計(jì)算機(jī)底層知識(shí)之二進(jìn)制中我們講過(guò),由于計(jì)算機(jī)內(nèi)部所有的信息都是以二進(jìn)制數(shù)的形式來(lái)處理,因此, 「整數(shù)和小數(shù)并無(wú)差別」 。

在說(shuō)明計(jì)算機(jī)如何用二進(jìn)制數(shù)表示小數(shù)的具體方法前,我們先嘗試將1011.0011這個(gè)有小數(shù)點(diǎn)的二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)。

小數(shù)點(diǎn) 「前面」 部分的轉(zhuǎn)換方法在計(jì)算機(jī)底層知識(shí)之二進(jìn)制中介紹過(guò)。只需將各 「數(shù)位」 數(shù)值和 「位權(quán)」 相乘,然后再將相乘的結(jié)果相加即可實(shí)現(xiàn)。其實(shí),針對(duì)小數(shù)點(diǎn)后面的部分,也是 「照貓畫虎」 ,也是將各 「數(shù)位」 數(shù)值和 「位權(quán)」 相乘的結(jié)果相加即可。

圖片

二進(jìn)制數(shù)小數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)

二進(jìn)制數(shù)小數(shù)點(diǎn)前面部分的**「位權(quán)」**

  • 第一位是20次冪
  • 第二位是21次冪
  • 第三位是22次冪
  • 以此類推

而小數(shù)點(diǎn)后面部分的**「位權(quán)」**

  • 第一位是2-1次冪
  • 第二位是2-2次冪
  • 第三位是2-3次冪
  • 以此類推

?0次冪前面的位的位權(quán)按照1次冪、2次冪····的方式**「遞增」**

0次冪后面的位的位權(quán)按照-1次冪、-2次冪····的方式**「遞減」**

?


計(jì)算機(jī)運(yùn)算出錯(cuò)的原因

?計(jì)算機(jī)運(yùn)算出錯(cuò)的原因:「有一些十進(jìn)制數(shù)的小數(shù)無(wú)法轉(zhuǎn)換成二進(jìn)制」

?

小數(shù)點(diǎn)后4位用二進(jìn)制數(shù)表示時(shí)的數(shù)值范圍為0.0000~0.1111。這里只能表示0.50.24、0.125、0.0625這四個(gè)二進(jìn)制數(shù)小數(shù)點(diǎn)后面的位權(quán)組合而成(相加總和)的小數(shù)。

圖片

?可以看出:「二進(jìn)制數(shù)是連續(xù)的,十進(jìn)制數(shù)是非連續(xù)的」

?

在前面講二進(jìn)制的時(shí)候,我們說(shuō),根據(jù)IC引腳個(gè)數(shù)不同,我們可以表示位數(shù)不同的二進(jìn)制數(shù)。我們可以通過(guò)增加引腳數(shù),也就是增加二進(jìn)制小數(shù)點(diǎn)后面的位數(shù),與其相對(duì)應(yīng)的十進(jìn)制數(shù)的個(gè)數(shù)也會(huì)增加, 「但是不管增加多少位,2的-〇〇次冪怎么相加都無(wú)法得到0.1這個(gè)結(jié)果」 。

實(shí)際上,十進(jìn)制數(shù)0.1轉(zhuǎn)換成二進(jìn)制后,會(huì)變成0.00011001100···1100循環(huán))這樣的 「循環(huán)小數(shù)」 。這和用十進(jìn)制數(shù)來(lái)表示1/3是一樣的道理。

?計(jì)算機(jī)這個(gè) 「功能有限」 的機(jī)器設(shè)備,是無(wú)法處理 「無(wú)限循環(huán)」 的小數(shù)的

?

因此,在遇到 「循環(huán)小數(shù)」 時(shí),計(jì)算機(jī)就會(huì)根據(jù) 「變量數(shù)據(jù)類型」 所對(duì)應(yīng)的長(zhǎng)度將數(shù)值從 「中間截?cái)唷?/strong> 或者 「四舍五入」 。

然后,我們?cè)俳Y(jié)合我們上面的例子,一個(gè) 「循環(huán)小數(shù)」 在進(jìn)行存儲(chǔ)的時(shí)候,已經(jīng)被 「掐頭去尾」 ,而偏偏針對(duì)這個(gè)值,又進(jìn)行了N多次處理。不怕你不努力,就怕你,持之以恒的向偏離既定軌道的方向上移動(dòng),那么結(jié)果可想而知,是永遠(yuǎn)不會(huì)達(dá)到最終想要的結(jié)果。


浮點(diǎn)數(shù)

1011.0011這樣帶小數(shù)點(diǎn)的表現(xiàn)形式,在計(jì)算機(jī)內(nèi)部是無(wú)法使用的。

很多編程語(yǔ)言中都提供了兩種表示小數(shù)的數(shù)據(jù)類型,分別是 「雙精度浮點(diǎn)數(shù)」「單精度浮點(diǎn)數(shù)」 。

  • 「雙精度浮點(diǎn)數(shù)」64位表示小數(shù)
  • 「單精度浮點(diǎn)數(shù)」32位表示小數(shù)

「浮點(diǎn)數(shù)」 是指用 「符號(hào)」 、 「尾數(shù)」 、 「基數(shù)」「指數(shù)」 這四部分表示的小數(shù)。

圖片

?計(jì)算機(jī)內(nèi)部使用的是二進(jìn)制數(shù),所以 「基數(shù)是2」 ,因此,實(shí)際的數(shù)據(jù)中往往不考慮基數(shù)。只用 「符號(hào)」 、 「尾數(shù)」 、 「指數(shù)」 這三部分就可以表示 「浮點(diǎn)數(shù)」 。

?

浮點(diǎn)數(shù)表現(xiàn)形式

浮點(diǎn)數(shù)的表現(xiàn)方式有很多中,我們采用IEEE標(biāo)準(zhǔn)來(lái)解釋。

圖片

雙精度浮點(diǎn)數(shù)和單精度浮點(diǎn)數(shù)在表示同一個(gè)數(shù)值時(shí) 「使用的位數(shù)」 不同。

「符號(hào)部分」 是指使用一個(gè) 「數(shù)據(jù)位」 來(lái)表示符號(hào)。「數(shù)據(jù)位是1時(shí)表示負(fù),為0時(shí)表示正或者0」

?數(shù)值的大小用 「尾數(shù)部分」「指數(shù)部分」 來(lái)表示。即用 「尾數(shù)部分 × 2的指數(shù)部分次冪」 的形式來(lái)表示。

?

  • 「尾數(shù)部分」 用的是**「將小數(shù)點(diǎn)前面的值固定為1的正則表達(dá)式」**
  • 「指數(shù)部分」 用的是**「EXCESS系統(tǒng)表示」**

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7295

    瀏覽量

    87533
  • 程序
    +關(guān)注

    關(guān)注

    115

    文章

    3749

    瀏覽量

    80670
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4697

    瀏覽量

    68091
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    計(jì)算機(jī)組成原理基礎(chǔ)知識(shí)

    計(jì)算機(jī)組成原理基礎(chǔ)知識(shí),前言參考:《王道計(jì)算機(jī)組成原理》學(xué)習(xí)筆記總目錄+思維導(dǎo)圖2019 王道考研 計(jì)算機(jī)組成原理第一章 計(jì)算機(jī)系統(tǒng)概述1.
    發(fā)表于 07-16 07:48

    計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識(shí)了解

    計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)復(fù)習(xí)一、 計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識(shí)了解:計(jì)算機(jī)網(wǎng)絡(luò)(Internet)的發(fā)展 面向終端的計(jì)算機(jī)網(wǎng)絡(luò)(單個(gè)
    發(fā)表于 07-26 06:27

    計(jì)算機(jī)基礎(chǔ)知識(shí)

    前言《MSP430單片機(jī)應(yīng)用基礎(chǔ)與實(shí)踐》(華中科技大學(xué)出版社)------第0章------計(jì)算機(jī)基礎(chǔ)知識(shí)(本文章作備忘錄使用)1.進(jìn)制轉(zhuǎn)換2.數(shù)值數(shù)據(jù)的表示3.計(jì)算機(jī)的碼制
    發(fā)表于 11-29 06:03

    計(jì)算機(jī)簡(jiǎn)介

    1計(jì)算機(jī)基礎(chǔ)知識(shí)1.計(jì)算機(jī)簡(jiǎn)介1.1計(jì)算機(jī)定義:按照一定邏輯
    發(fā)表于 12-23 06:45

    計(jì)算機(jī)應(yīng)用基礎(chǔ)課件

    計(jì)算機(jī)應(yīng)用基礎(chǔ)課件內(nèi)容有計(jì)算機(jī)基礎(chǔ)知識(shí),計(jì)算機(jī)鍵盤及漢字輸入,操作系統(tǒng)及使用,網(wǎng)絡(luò)基礎(chǔ)知識(shí)和Internet,電子表格軟件Excel2000
    發(fā)表于 09-25 12:30 ?0次下載
    <b class='flag-5'>計(jì)算機(jī)</b>應(yīng)用基礎(chǔ)課件

    微型計(jì)算機(jī)基礎(chǔ)知識(shí)

    1.1 微型計(jì)算機(jī)的組成及工作原理1.1.1  微型計(jì)算機(jī)中的基本概念1. 微處理器2. 微型計(jì)算機(jī)  &nb
    發(fā)表于 02-23 12:02 ?64次下載

    計(jì)算機(jī)基礎(chǔ)知識(shí)選擇題

    計(jì)算機(jī)基礎(chǔ)知識(shí)選擇題 1.微型計(jì)算機(jī)是由( )、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備等部件組成的。  A. 硬盤 B. 軟盤 C. 鍵盤 D. 運(yùn)算控
    發(fā)表于 03-03 08:32 ?89次下載

    計(jì)算機(jī)基礎(chǔ)知識(shí)練習(xí)題

    計(jì)算機(jī)基礎(chǔ)知識(shí)練習(xí)題(一)單選題:1計(jì)算機(jī)的描述中,( )是錯(cuò)誤的。A. 計(jì)算機(jī)是一種可供計(jì)算
    發(fā)表于 03-03 08:33 ?70次下載

    計(jì)算機(jī)基礎(chǔ)知識(shí)試題

    計(jì)算機(jī)基礎(chǔ)知識(shí)試題 1、CPU的主要功能是進(jìn)行(     )。
    發(fā)表于 10-25 10:59 ?7935次閱讀

    計(jì)算機(jī)總線技術(shù)基礎(chǔ)知識(shí)

    計(jì)算機(jī)總線技術(shù)基礎(chǔ)知識(shí) 任何一個(gè)微處理器都要與一定數(shù)量的部件和外圍設(shè)備連接,但如果將各部件和每一種外圍設(shè) 備都分別用一
    發(fā)表于 05-22 08:52 ?817次閱讀

    計(jì)算機(jī)基礎(chǔ)知識(shí)介紹

    計(jì)算機(jī)基礎(chǔ)知識(shí)計(jì)算機(jī)基礎(chǔ)知識(shí)計(jì)算機(jī)基礎(chǔ)知識(shí)
    發(fā)表于 12-03 16:13 ?0次下載

    計(jì)算機(jī)測(cè)控系統(tǒng)與操作系統(tǒng)概述集合【labview基礎(chǔ)知識(shí)

    計(jì)算機(jī)測(cè)控系統(tǒng)與操作系統(tǒng)概述集合,labview基礎(chǔ)知識(shí)
    發(fā)表于 01-12 11:13 ?19次下載

    計(jì)算機(jī)控制技術(shù)的基礎(chǔ)知識(shí)點(diǎn)說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是計(jì)算機(jī)控制技術(shù)的基礎(chǔ)知識(shí)點(diǎn)說(shuō)明包括了:1 計(jì)算機(jī)控制系統(tǒng)的概念,2 計(jì)算機(jī)控制系統(tǒng)的組成,3
    發(fā)表于 04-27 08:00 ?5次下載
    <b class='flag-5'>計(jì)算機(jī)</b>控制技術(shù)的<b class='flag-5'>基礎(chǔ)知識(shí)</b>點(diǎn)說(shuō)明

    圖像處理基礎(chǔ)知識(shí) 1

    我一直都在這里分享計(jì)算機(jī)基礎(chǔ)知識(shí),比如計(jì)算機(jī)組成原理、數(shù)據(jù)結(jié)構(gòu)與算法、計(jì)算機(jī)網(wǎng)絡(luò)和操作系統(tǒng)等。 不過(guò)偶爾我也想寫一下其他的話題,今天就想和你聊聊圖像
    的頭像 發(fā)表于 02-08 17:08 ?755次閱讀
    圖像<b class='flag-5'>處理</b><b class='flag-5'>基礎(chǔ)知識(shí)</b> <b class='flag-5'>1</b>

    計(jì)算機(jī)基礎(chǔ)知識(shí)之處理小數(shù)2

    有句話說(shuō), 「雪崩的時(shí)候,沒(méi)有一片雪花是無(wú)辜的」 。在這段代碼中,程序沒(méi)錯(cuò),計(jì)算機(jī)也沒(méi)有發(fā)生故障,當(dāng)然和所使用的語(yǔ)言也沒(méi)有關(guān)系(選用其他的高級(jí)語(yǔ)言可能運(yùn)算結(jié)果不同)。如果硬要找一個(gè)背鍋的,那就是 「計(jì)算機(jī)處理
    的頭像 發(fā)表于 03-31 16:10 ?1189次閱讀
    <b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>基礎(chǔ)知識(shí)</b><b class='flag-5'>之處理</b><b class='flag-5'>小數(shù)</b>2