關於浮點數的細節問題

2021-01-09 小梗說遊戲

以下內容供計算機學習者參考,非專業人士慎看,因為可能會看不懂。

1.計算機中浮點數的構成分為三個部分:符號位,指數位和小數位。

符號位決定了這個浮點數的正負,指數位和小數位決定了這個浮點數的大小。

2.IEEE為了讓浮點數可以表示所有的情況,所以把浮點數分為四種情況:規格化、非規格化、無窮大和NaN

規格化是為了表示浮點數的一般情況。

非規格化是為了表示0和非常接近0的浮點數。

無窮大是為了表示正負無窮大。

NaN是為了表示非正常數情況,比如虛數。

4.以單精度浮點數float為例,float符號位佔1位,指數佔8位,小數位佔23位。

規格化的:指數位既不為0也不為255。

非規格化:指數位全為0。

無窮大:指數全為1,小數位全為0,正負由符號位決定,1為負無窮大,0為正無窮大。

NaN:指數位全為1,小數位不為0。

3.為了讓指數位能是負數,所以引入了一個叫「偏置」的量,這個量的值為:2^(k-1)-1,其中k為指數位的位數。

在實際計算過程中要加上或者減去這個偏置量。

4.規格化:把浮點數轉化為十進位需要把指數位減去偏置量。

非規格化:把浮點數轉化為十進位需要把指數位加1再減去偏置量。這一點很特殊需要注意。

5.規格化的小數部分其實是隱含了開頭的1,比如二進位數1.1101,在規格化浮點數的小數部分只會記錄1101,會省略開頭的1,所以在實際計算中要把這個1加上。

非規格化的小數部分沒有隱含開頭的1,它的小數部分就是「真值」,這一點需要特別注意。

相關焦點

  • python浮點數表示專題及常見問題 - CSDN
    浮點數用來存儲計算機中的小數,與現實世界中的十進位小數不同的是,浮點數通過二進位的形式來表示一個小數。在深入了解浮點數的實現之前,先來看幾個 Python 浮點數計算有意思的例子:0.1 == 0.10000000000000000000001True0.1+0.1+0.1 == 0.3FalseIEEE 浮點數表示法這些看起來違反常識的「錯誤」並非 Python 的錯,而是由浮點數的規則所決定的,即使放到其它語言中結果也是這樣的
  • php浮點數和字符串
    有關浮點數的細節1:浮點數不應直接進行大小比較!先看一個現象:可見:浮點數直接進行比較是「不可靠的」。原因是:浮點數在內存中的二進位形式(最底層的形式),是不精確的,比如:那如果需要(其實這很常見)進行浮點數比較,該怎麼辦?考慮現實應用所需的精度要求的基礎上,來講他們轉換為整數後進行比較!
  • 在單片機中的浮點數編程
    問題背景: 在使用8BIT單片機進行開發,不支持浮點數運算。但是開發必須用到sin,cos,arctan等浮點數函數。本文引用地址:http://www.eepw.com.cn/article/201611/318614.htm苦想了兩天,才發現,自己要當一回「計算機」。
  • 在編程中,為什麼要把小數叫做浮點數?
    小數為什麼會被成為浮點數?有不少程式設計師雖然能夠很熟練的使用某種程式語言,但是對於小數為什麼會被稱為浮點數卻是不太理解。小數為何會被叫做浮點數?雖然這些程式設計師對於小數被稱作浮點數的問題並不理解,但是這並不影響程式設計師編程,或者可以說這種問題對於一個程式設計師的編程能力絲毫沒有影響。
  • 單片機浮點數的實用快速除法介紹
    作為單片機程式設計師來說,在編寫程序時經常要檢驗程序中的浮點數運算結果是否正確,但手中又沒有合適的檢驗工具,非常麻煩。而一般單片機是沒有浮點數運算指令的,必須自行編制相應軟體。
  • 單片機浮點數的運算原理及表達方式
    打開APP 單片機浮點數的運算原理及表達方式 發表於 2019-04-18 15:38:39 單片機一般浮點數均採用士MxC的形式來表示
  • 學校裡學不到的C語言教程之6:可怕的浮點數
    所以選題一直儘量遵循這樣的原則:凡是我工作過程中曾經出過錯誤的、困惑多時的、或者多次出現錯誤的簡單的問題才行。今天這個問題勉強可以算第三種。但它其實上不是,其實上它是另外一種情形:是我一入行就有前輩很鄭重告知的一個問題。說到這位前輩,我忍不住要給正準備走出校園的那些同學們上一個不太愉快的課。當我們離開學校走入社會時,就要忘掉那些時刻都能幫助我們的學長、同學、甚至老師們。
  • 第19 p,了解Python中的數據類型,了解整數與浮點數
    大家好,我是楊數Tos,這是《從零基礎到大神》系列課程的第19篇文章,第二階段的課程:Python基礎知識:Python中的數據類型介紹及整數、浮點數的講解。學習本課程,建議先看一遍:【計算機基礎知識】課程。
  • Javascript每日一學-Javascript中關於浮點數運算的坑
    Javascript中的數字都是雙精度的浮點數。Javascript中的整數並不是一個獨立的數據類型,而是浮點數的一個子集。浮點數的坑我們直接看下面的一個例子。在瀏覽器的console控制臺上我們分別進行以下的浮點數運算。
  • 關於浮點數的小數部分計算
    收到QQ上一個留言,有位網友詢問我一個簡單的問題。問題如下:本文引用地址:http://www.eepw.com.cn/article/201608/294898.htm  1111 011. 1 0001 1110 1011 1000=123.559998,小數點後是怎麼計算的呢?謝謝您!  很明顯1111 011. 1 0001 1110 1011 1000是一個二進位數。
  • 關於《不一樣的卡梅拉》,4個問題及閱讀細節,這篇文章供參考
    還有就是這書真的是太長了,每一次讀完都15分鐘以上,口乾舌燥的,究竟是照著讀還是像一些繪本指導裡講的那樣,把每張圖的細節都以開放式的問題給孩子提問到?還有,我看這書還有第二輯,賣的也特別好,這種一出好幾輯的書有沒有一起入手?……這位寶媽的疑問三聯我在之前的幾年中也屢屢碰到。這套書真可謂是「話題王」。
  • 關於星座的問題
    【關於星座的問題】其實地球人所說的星座並不是宇宙景象,而是地球人對宇宙景象的錯誤認知。為什麼這樣說呢?因為地球人對宇宙中星球的本質和屬性都不了解,怎麼能了解它們產生什麼樣的能力呢?我們晚上看到的星星,有的是陽性星球,有的是陰性星球,有的是能量場,還有的是很高頻的生命或高級存在,都是因為它們能量場的頻率較高而折射出的光芒,並不是這些物體或生命及高級存在的原貌。
  • 關於冥王星那些不為人知的細節
    這些是我們在2015年7月美國宇航局的新視野號飛船飛過之前不知道的細節。冥王星是一個複雜而神秘的山脈,山谷,平原和隕石坑世界。冥王星於1930年被發現,長期以來被認為是我們太陽系的第九顆行星。但是,在遙遠的柯伊伯帶上發現類似的有趣世界之後,冰冷的冥王星被重新歸類為矮行星。冥王星有五個已知的衛星,其中最大的是卡戎。
  • 作為電工工作中注意到這些小細節可解決大問題
    技術是層窗戶紙,一點就透,對於電工職業而言也是如此,做電工久了多多少少都會知道一些小細節,雖不一定常常用到,但用到時就會很方便,在此分享幾個小細節,希望對同行們的工作能有所幫助。