浮點(diǎn)數(shù)轉(zhuǎn)換十進(jìn)制數(shù)

根據(jù)國際標(biāo)準(zhǔn)IEEE 754甚侣,任意一個二進(jìn)制浮點(diǎn)數(shù)V可以表示成下面的形式:

![
3229842-dc513ebfe7b96346.jpg

(1)(-1)^s表示符號位示血,當(dāng)s=0混移,V為正數(shù)廓译;當(dāng)s=1,V為負(fù)數(shù)乙濒。

(2)M表示有效數(shù)字陕赃,大于等于1,小于2。

(3)2^E表示指數(shù)位么库。

IEEE754標(biāo)準(zhǔn)中規(guī)定float單精度浮點(diǎn)數(shù)在機(jī)器中表示用 1 位表示數(shù)字的符號傻丝,用 8 位來表示指數(shù),用23 位來表示尾數(shù)诉儒,即小數(shù)部分桑滩。對于double雙精度浮點(diǎn)數(shù),用 1 位表示符號允睹,用 11 位表示指數(shù),52 位表示尾數(shù)幌氮,其中指數(shù)域稱為階碼缭受。
題目中的32位浮點(diǎn)數(shù),可以寫為 S+E+M 三部分的形式:0 10000101 11011010000000000000000
F87AF9B3-96A6-4892-BBD7-107968F22B5B.png
IEEE 754對有效數(shù)字M和指數(shù)E该互,還有一些特別規(guī)定米者。

有效數(shù)字 M ,1≤M<2宇智,也就是說蔓搞,M可以寫成1.xxxxxx的形式,其中xxxxxx表示小數(shù)部分随橘。IEEE 754規(guī)定喂分,在計(jì)算機(jī)內(nèi)部保存M時,默認(rèn)這個數(shù)的第一位總是1机蔗,因此可以被舍去蒲祈,只保存后面的xxxxxx部分。比如保存1.01的時候萝嘁,只保存01梆掸,等到讀取的時候,再把第一位的1加上去牙言。這樣做的目的酸钦,是節(jié)省1位有效數(shù)字。以32位浮點(diǎn)數(shù)為例咱枉,留給M只有23位卑硫,將第一位的1舍去以后,等于可以保存24位有效數(shù)字庞钢。
至于指數(shù)E,首先拔恰,E為一個無符號整數(shù)(unsigned int)。這意味著基括,如果E為8位颜懊,它的取值范圍為0-255;如果E為11位,它的取值范圍為0-2047河爹。但是匠璧,我們知道,科學(xué)計(jì)數(shù)法中的E是可以出現(xiàn)負(fù)數(shù)的咸这,所以IEEE 754規(guī)定夷恍,E的真實(shí)值必須再減去一個中間數(shù),對于8位的E媳维,這個中間數(shù)是127酿雪;對于11位的E,這個中間數(shù)是1023侄刽。
指數(shù)E還可以再分成三種情況:

E不全為0或不全為1指黎。

這時,浮點(diǎn)數(shù)就采用上面的規(guī)則表示州丹,即指數(shù)E的計(jì)算值減去127(或1023)醋安,得到真實(shí)值,再將有效數(shù)字M前加上第一位的1墓毒。

E全為0吓揪。

這時,浮點(diǎn)數(shù)的指數(shù)E等于1-127(或者1-1023)所计,有效數(shù)字M不再加上第一位的1柠辞,而是還原為0.xxxxxx的小數(shù)。這樣做是為了表示±0醉箕,以及接近于0的很小的數(shù)字钾腺。

E全為1。

這時讥裤,如果有效數(shù)字M全為0放棒,表示±無窮大(正負(fù)取決于符號位s);如果有效數(shù)字M不全為0己英,表示這個數(shù)不是一個數(shù)(NaN)间螟。

舉例來說,

十進(jìn)制的5.0损肛,寫成二進(jìn)制是101.0厢破,相當(dāng)于1.01×2^2。那么治拿,按照上面V的格式摩泪,可以得出s=0,M=1.01劫谅,E=2见坑。

十進(jìn)制的-5.0嚷掠,寫成二進(jìn)制是-101.0,相當(dāng)于-1.01×2^2荞驴。那么不皆,s=1,M=1.01熊楼,E=2霹娄。


bk1.png

JS 中的最大安全整數(shù)是多少?

JS 中所有的數(shù)字類型鲫骗,實(shí)際存儲都是通過 8 字節(jié) double 浮點(diǎn)型 表示的犬耻。浮點(diǎn)數(shù)并不是能夠精確表示范圍內(nèi)的所有數(shù)的, 雖然 double 浮點(diǎn)型的范圍看上去很大: 2.23x10^(-308) ~ 1.79x10^308执泰。 可以表示的最大整數(shù)可以很大香追,但能夠精確表示,使用算數(shù)運(yùn)算的并沒有這么大坦胶。

它其實(shí)連這樣的簡單加法也會算錯:

bk6.png

所以在 js 中能夠安全使用的有符號 安全 大整數(shù)(注意這里是指能夠安全使用,進(jìn)行算數(shù)運(yùn)算的范圍)晴楔,并不像其他語言在 64 位環(huán)境中那樣是:

bk7.png

而是

bk8.png

JS 的最大和最小安全值可以這樣獲得:

bk5.png

通過下面的例子顿苇,你會明白為什么大于這個值的運(yùn)算是不安全的:

bk4.png

這些運(yùn)算都是錯誤的結(jié)果, 因?yàn)樗鼈冞M(jìn)行的都是浮點(diǎn)數(shù)運(yùn)算會丟失精度税弃。

為什么是這個值?

double 浮點(diǎn)數(shù)結(jié)構(gòu)如下:

1 位符號位
11 位指數(shù)位
52 位尾數(shù)位

使用 52 位表示一個數(shù)的整數(shù)部分纪岁,那么最大可以精確表示的數(shù)應(yīng)該是 2^52 - 1 才對, 就像 64 位表示整數(shù)時那樣: 2^63 - 1 (去掉 1 位符號位)则果。 但其實(shí)浮點(diǎn)數(shù)在保存數(shù)字的時候做了規(guī)格化處理幔翰,以 10 進(jìn)制為例:


bk3.png

對于二進(jìn)制來說, 小數(shù)點(diǎn)前保留一位西壮, 規(guī)格化后始終是 1.***, 節(jié)省了 1 bit遗增,這個 1 并不需要保存。

解決浮點(diǎn)數(shù)溢出的辦法

使用toFixed方法返回一個以定點(diǎn)表示法表示的數(shù)字的字符串形式

調(diào)用一個處理函數(shù)


bk2.png

參考文章:http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末款青,一起剝皮案震驚了整個濱河市做修,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抡草,老刑警劉巖饰及,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異康震,居然都是意外死亡燎含,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門腿短,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屏箍,“玉大人绘梦,你說我怎么就攤上這事∠吵” “怎么了谚咬?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尚粘。 經(jīng)常有香客問我择卦,道長,這世上最難降的妖魔是什么郎嫁? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任秉继,我火速辦了婚禮,結(jié)果婚禮上泽铛,老公的妹妹穿的比我還像新娘尚辑。我一直安慰自己,他們只是感情好盔腔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布杠茬。 她就那樣靜靜地躺著,像睡著了一般弛随。 火紅的嫁衣襯著肌膚如雪瓢喉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天舀透,我揣著相機(jī)與錄音栓票,去河邊找鬼。 笑死愕够,一個胖子當(dāng)著我的面吹牛走贪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惑芭,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼坠狡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了遂跟?” 一聲冷哼從身側(cè)響起擦秽,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漩勤,沒想到半個月后感挥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡越败,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年触幼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片究飞。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡置谦,死狀恐怖堂鲤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情媒峡,我是刑警寧澤瘟栖,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站谅阿,受9級特大地震影響半哟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜签餐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一寓涨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氯檐,春花似錦戒良、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至河泳,卻和暖如春拇颅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乔询。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留韵洋,地道東北人竿刁。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像搪缨,于是被迫代替她去往敵國和親食拜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容