成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

理解前端數(shù)據(jù)類(lèi)型

wums / 2507人閱讀

摘要:基本數(shù)據(jù)類(lèi)型的值保存在棧內(nèi)存中的簡(jiǎn)單數(shù)據(jù)段,按值訪(fǎng)問(wèn)。文字常量區(qū)存儲(chǔ)常量字符串保存在棧中保存在棧中,保存在常量區(qū)程序代碼區(qū)存儲(chǔ)程序的二進(jìn)制代碼關(guān)于數(shù)字類(lèi)型根據(jù)關(guān)于的描述可知,的數(shù)字類(lèi)型只有一種,使用標(biāo)準(zhǔn)中的雙精度浮點(diǎn)數(shù)來(lái)存儲(chǔ),長(zhǎng)度為位。

數(shù)據(jù)類(lèi)型

基本數(shù)據(jù)類(lèi)型:String,Boolean,Number,undefined,null,Symbol(ES6)
引用數(shù)據(jù)類(lèi)型:Object,F(xiàn)unctoin,Array,RegExp 等

堆(heap)和棧(stack)
堆和棧都是存放臨時(shí)數(shù)據(jù)的內(nèi)存空間(注意與數(shù)據(jù)結(jié)構(gòu)堆、棧的區(qū)分):
棧時(shí)向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的內(nèi)存的區(qū)域(最大容量是系統(tǒng)預(yù)設(shè)好的),由編譯器自動(dòng)分配和釋放,速度快,用于存放函數(shù)的參數(shù)值與局部變量的值,只要棧的剩余空間大于申請(qǐng)空間就分配,否則報(bào)錯(cuò)異常,其操作方式類(lèi)似于數(shù)據(jù)結(jié)構(gòu)中的棧,是先進(jìn)后出的。

基本數(shù)據(jù)類(lèi)型的值保存在棧內(nèi)存中的簡(jiǎn)單數(shù)據(jù)段,按值訪(fǎng)問(wèn)。

堆是在程序運(yùn)行時(shí)(而不是在程序編譯時(shí))申請(qǐng)的內(nèi)存空間,即動(dòng)態(tài)分配內(nèi)存對(duì)其訪(fǎng)問(wèn)(大小受到虛擬內(nèi)存影響),一般由程序員分配和釋放,若沒(méi)有手動(dòng)釋放則在程序結(jié)束時(shí)由 OS 回收,操作方式與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,類(lèi)似于鏈表。

引用數(shù)據(jù)類(lèi)型的值是指保存在堆內(nèi)存中的對(duì)象,由于對(duì)象的大小不固定不能保存在棧內(nèi)存中,然而內(nèi)存地址的大小是固定的,故可以將其保存在棧內(nèi)存中,也就是說(shuō):變量在棧內(nèi)存中保存的數(shù)據(jù)實(shí)際上是指向堆內(nèi)存中保存的對(duì)象的指針。

對(duì)于堆,操作系統(tǒng)有一個(gè)記錄空閑內(nèi)存地址的鏈表,當(dāng)系統(tǒng)收到申請(qǐng)時(shí),會(huì)遍歷該鏈表尋找第一個(gè)空間大于所申請(qǐng)空間的堆節(jié)點(diǎn),然后將該節(jié)點(diǎn)從空閑區(qū)鏈表中刪除,將該節(jié)點(diǎn)的空間分配給程序,若是找到的節(jié)點(diǎn)地址空間大于申請(qǐng)的大小,系統(tǒng)會(huì)把剩余的節(jié)點(diǎn)空間重新添加到內(nèi)存空閑區(qū)鏈表中。
(故而使用堆時(shí)內(nèi)存地址不連續(xù),且容易產(chǎn)生碎片)

內(nèi)存中的其他空間:
全局區(qū)(靜態(tài)區(qū)):存儲(chǔ)全局變量和靜態(tài)變量,程序結(jié)束后由系統(tǒng)釋放。

文字常量區(qū):存儲(chǔ)常量字符串

char *p1; // p1 保存在棧中
char *p2 = "test"; // p2 保存在棧中,test 保存在常量區(qū)
程序代碼區(qū):存儲(chǔ)程序的二進(jìn)制代碼
關(guān)于 Number 數(shù)字類(lèi)型
In JavaScript, Number is a numeric data type in the double-precision 64-bit floating point format (IEEE 754). In other programming languages different numeric types can exist, for examples: Integers, Floats, Doubles, or Bignums.

根據(jù) MDN 關(guān)于 Number 的描述 可知,javascript 的數(shù)字類(lèi)型只有 number 一種,使用 IEEE754 標(biāo)準(zhǔn)中的雙精度浮點(diǎn)數(shù)來(lái)存儲(chǔ),長(zhǎng)度為64位。

符號(hào)位 指數(shù)位 小數(shù)位
0 00000000000 00000...0000000000000000000000000
1 bit 11 bit 52 bit
問(wèn)題:根據(jù) IEEE754 計(jì)算 0.1 + 0.2 = ? 使用乘二取整法計(jì)算 0.1 的二進(jìn)制表示形式

0.1 =
(0.00011)2 0011 無(wú)限循環(huán) =
(-1)^0 2^(-4) (1.1001)2 1001 無(wú)限循環(huán)

0.2 =
(-1)^0 2^(-3) (1.1001)2 1001 無(wú)限循環(huán)

由于小數(shù)位僅儲(chǔ)存 52 bit, 儲(chǔ)存時(shí)會(huì)將超出精度部分進(jìn)行 "零舍一入"
值類(lèi)型 小數(shù)位存儲(chǔ)范圍內(nèi) 存儲(chǔ)范圍外
無(wú)限精確值 1001 1001 1001 1001 ... 1001 1001 1001 1001 1001...
實(shí)際存儲(chǔ)值 1001 1001 1001 1001 ... 1001 1001 1010 -

故而 0.1 和 0.2 的浮點(diǎn)數(shù)存儲(chǔ)形式表示為:

浮點(diǎn)數(shù)值 符號(hào)位 指數(shù)值 小數(shù)位
0.1 0 -4 1001 1001 1001 1001 ... 1001 1001 1010
0.2 0 -3 1001 1001 1001 1001 ... 1001 1001 1010
0.1 + 0.2
在計(jì)算浮點(diǎn)數(shù)相加時(shí)需要先進(jìn)行“對(duì)位”,將較小的指數(shù)化為較大的指數(shù),并將小數(shù)部分相應(yīng)右移。

0.1 =
(?1)^0 2^(?3) (0.11001100110011001100110011001100110011001100110011010)2

0.2 =
(?1)^0 2^(?3) (1.1001100110011001100110011001100110011001100110011010)2

0.1 + 0.2 =
(?1)^0 2^(?2) (1.0011001100110011001100110011001100110011001100110100)2 =
0.30000000000000004

解決方案

mathjs (https://github.com/josdejong/...

decimal.js (https://github.com/MikeMcl/de...

big.js (https://github.com/10081677wc...

排除直接使用超大數(shù)或者超小數(shù)的情況,出現(xiàn)這種問(wèn)題基本是浮點(diǎn)數(shù)的小數(shù)部分在轉(zhuǎn)成二進(jìn)制時(shí)丟失精度造成的,所以我們可以將小數(shù)部分轉(zhuǎn)換成整數(shù)后再計(jì)算,需要注意的是乘法操作也是一種浮點(diǎn)數(shù)計(jì)算,在轉(zhuǎn)換過(guò)程中可能存在精度問(wèn)題。

所以不要直接通過(guò)計(jì)算將小數(shù)轉(zhuǎn)換成整數(shù)!我們可以通過(guò)字符串操作:移動(dòng)小數(shù)點(diǎn)的位置來(lái)轉(zhuǎn)換成整數(shù),最后再同樣通過(guò)字符串操作轉(zhuǎn)換回小數(shù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/83224.html

相關(guān)文章

  • 前端基礎(chǔ)進(jìn)階(一):內(nèi)存空間詳細(xì)圖解

    摘要:一棧數(shù)據(jù)結(jié)構(gòu)與不同,中并沒(méi)有嚴(yán)格意義上區(qū)分棧內(nèi)存與堆內(nèi)存。引用數(shù)據(jù)類(lèi)型的值是保存在堆內(nèi)存中的對(duì)象。不允許直接訪(fǎng)問(wèn)堆內(nèi)存中的位置,因此我們不能直接操作對(duì)象的堆內(nèi)存空間。為了更好的搞懂變量對(duì)象與堆內(nèi)存,我們可以結(jié)合以下例子與圖解進(jìn)行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...

    _Suqin 評(píng)論0 收藏0
  • 一名【合格】前端工程師的自檢清單

    摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識(shí),其實(shí)都是來(lái)自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。 開(kāi)篇 前端開(kāi)發(fā)是一個(gè)非常特殊的行業(yè),它的歷史實(shí)際上不是很長(zhǎng),但是知識(shí)之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研...

    羅志環(huán) 評(píng)論0 收藏0
  • 一名【合格】前端工程師的自檢清單

    摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識(shí),其實(shí)都是來(lái)自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。開(kāi)篇 前端開(kāi)發(fā)是一個(gè)非常特殊的行業(yè),它的歷史實(shí)際上不是很長(zhǎng),但是知識(shí)之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系...

    isaced 評(píng)論0 收藏0
  • 基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)及js數(shù)據(jù)存儲(chǔ)

    摘要:引用數(shù)據(jù)類(lèi)型及堆內(nèi)存引用數(shù)據(jù)類(lèi)型是保存在堆內(nèi)存中的對(duì)象,他的大小是不固定的?;A(chǔ)數(shù)據(jù)類(lèi)型在變量對(duì)象里可以直接對(duì)應(yīng)對(duì)應(yīng)的值,而引用數(shù)據(jù)類(lèi)型是存儲(chǔ)在堆里的,在變量對(duì)象中對(duì)應(yīng)的是堆內(nèi)存的地址。因?yàn)槲覀冃薷谋举|(zhì)上是修改了堆內(nèi)存里的數(shù)據(jù)。 ? ??? ??因?yàn)橐郧扒岸碎_(kāi)發(fā)跟數(shù)據(jù)存儲(chǔ)打交道比較少,javascript又具有自動(dòng)垃圾回收機(jī)制。數(shù)據(jù)結(jié)構(gòu)以及存儲(chǔ)相關(guān)的概念,其實(shí)是很容易被前端er忽略的。...

    Brenner 評(píng)論0 收藏0
  • JavaScript系列(四) - 收藏集 - 掘金

    摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠?lái)都是中的主導(dǎo)范式。函數(shù)式編程是一種強(qiáng)調(diào)減少對(duì)程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠?lái)都是JavaScript中的主導(dǎo)范式。JavaScript作為一門(mén)多范式編程語(yǔ)言,然而,近幾年,函數(shù)式編程越來(lái)越多得受到開(kāi)發(fā)者的青睞。函數(shù)式編程是一種強(qiáng)調(diào)減少對(duì)程序外部狀態(tài)產(chǎn)生改變的方式。因此,...

    cfanr 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<