1. 程式人生 > >[note]浮點數二進位制科學計數法

[note]浮點數二進位制科學計數法

計算機裡用二進位制科學計數法表示小數,so

float: 32位

double : 64位

二進位制表示法:     符號位數   階碼位數     尾數位數

float                  :      1          8             23

double              :      1         11           52

-----十進位制數字轉為浮點數二進位制科學技術法過程--------------

1. 數字(10)= 整數部分+小數部分

          a.  整數部分---> 16進位制---->二進位制 (高位的0去掉)

          b: 小數部分轉為二進位制數字,與十進位制的對應關係如下

                             十進位制數           二進位制數

                            2的-1次方           0.1

                            2的-2次方           0.01

                            2的-3次方           0.001

                   依此類推,即,0.5(10)對應0.1(2), 2的-n次方中的n對應小數點後,二進位制的1所在位數

                   據此,把十進位制數字拆分為 0.5*0+0.25*0+....  的形式,並根據二進位制數和十進位制數的對應關係轉為二進位制數

           c. 數字(10)的二進位制數即為    整數部分二進位制數  .   小數部分二進位制數

           d. 二進位制數小數點左移至最高位1的後方,去掉最高位1,剩餘部分即為位數部分,不足23位的,低位補0

2. 小數點左移量+2的階碼位數減去1的次方-1 --->16進位制---->2進位制,即為階碼部分 

3. 如果是正數,則在階碼二進位制數字前補一個0; 負數在階碼數字前補0至階碼最高位,符號位填1

4. 組合符號位+階碼部分+尾數部分 , 即為該數字的浮點數二進位制科學計數法表示方式。

 ---------------------舉例------------------------------

例1. 38414.4(10)轉為double型

      1.       符號位為0,價碼11位, 尾數52位

                       38414.4=38414.4+0.4 ;

                       38414(10)= 960E (16)= 1001 0110 0000 1110 (2); 0.4(10) =0.5×0+0.25×1+0.125x1+0.0625x0+0.03125x0...= 0.0110 ... // 此處無法除盡,要算滿36位,                                                                                                                                                                                                                           以補足加上整數部分後,整個尾數部分要有52位

                       38414.4(10)= 1001 0110 0000 1110 . 0110 ....(2)

                       小數點左移15位即為 1. 001 0110 0000 1110 0110...   x 2的15次方,去掉最高為的1後,尾數 001 0110 0000 0110 ...

      2.  小數點左移量為15; double的階碼位數為11位,即偏移量修正值為 2^(11-1)-1=1023;

           15+1023=1038(10)---->  40E(16)---->0100 0000 1110 (2)

       3. 正數 ,不需要擴充套件

       4. 階碼+尾數,最終結果   即為double 型  0100  0000 1110  001 0110 0000 0110.... (尾數部分的小數要算滿到補足尾數的52位)

例2. -12.5(10)轉為 float 型

  1. 符號位 位1, 階碼8位, 尾數 23位

            12.5=12+0.5= 1100.1 (2)

             小數點左移3位, 即為  1.1001. 去掉最高位1, 尾數部分為 1001

   2.   小數點左移量為3; float階碼位數為8,即偏移量修正值為2^(8-1)-1=127;

              3+127=130(10) --->82(16) ---> 1000 0010(2)

  3. 負數,符號位為1

  4. 符號位+階碼+尾數,最終結果為 1 1000 0010 1001 0000 0000 0000 000

相關推薦

[note]點數二進位制科學計數

計算機裡用二進位制科學計數法表示小數,so float: 32位 double : 64位 二進位制表示法:     符號位數   階碼位數     尾數位數 float                  :      1          8            

Python中將科學計數(或以e為底的自然對數)字串轉換為float點數

沒時間完整寫,直接上程式碼吧# !usr/bin env python # -*- coding: utf-8 -*- import re import math def ConvertELogStrToValue(eLogStr): """ conv

Android獲取資料時 點型整數位數值(超8位)過大導致科學計數

今天在調介面時,有個實體變數A我定義float型別,當該變數的整數值超過8位的時候會出現科學計數法的情況 例如 19085161.59,顯示成1.454654864E的情況本來可以用String型別接收該欄位,但由於需要該數值做運算,所以想不改變原有型別一開始想過顯示時通過 

js 科學計數 轉換為 數字字符 突破冪數正數21位,負數7位的自動轉換限制

範圍 ace i++ 大於等於 位數 小數點 科學計算 個數 ons 前天工作中要轉換後臺返回的一個數據,返回是的科學計算的數字字符,用網上能搜索到的常用兩種方法轉換會有倍數的限制,然後又搜索了很久,還是沒有找到好的方法,雖然也有一些自己寫的方法,可還是不能像下面兩種方法

把一行數字(readline)讀進List並以科學計數輸出(write)到文件

readline 而且 write 每一個 inf log print clas split() 主要過程是讀取的時候是一行字符串,需要Strip去除空格等,然後split變成一個List。 註意這時候數據結構是List但是每一個元素是Str性質的。 所以需要map(flo

BigDecimal的用法詳解(保留兩位小數,四舍五入,數字格式化,科學計數轉數字,數字裏的逗號處理)

intvalue tom 引用 方法 mda ubi 結果 oid 創建 一、簡介 Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算。雙精度浮點型變量doubl

PAT 1024. 科學計數

ret 輸入 處理 begin log 正則表達 說明 保留 ron 科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正則表達式[+-][1-9]"."[0-9]+E[+-][0-9]+,即數字的整數部分只有1位,小數部分至少有1位,該數字及其指數部分的正

科學計數的轉換

div ins body static 轉換 top decimal 計數 num //將1.700001234E10轉換成整型的字符串 public static String changeBigNumber(String num){ BigDecimal bd = n

【Excle】科學計數快速還原

one 有時 wid 分享圖片 -i ima lin 需要 logs 在Excle的單元格中,如果輸入大於11位的數字,結果就會以E+形式顯示 如果是單個輸入的話,只需要把Excle中的單元格格式設置為文本即可,然後輸入就不會出現科學計數法,但是有時候是從外部導入的序號,

1024. 科學計數 (20)

小數點 else string 長度 strong 整數 包括 大寫 OS 科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正則表達式[+-][1-9]"."[0-9]+E[+-][0-9]+,即數字的整數部分只有1位,小數部分至少有1位,該數字及其指數部

js 科學計數

pow num 使用 sar exe 數字 unshift mst string function convertNum(num_str){ //參數必須為 字符串 //科學計數法字符 轉換 為數字字符, 突破正數21位和負數7位的Number自動轉換 // 兼

sqlserver中float轉varchar時不顯示科學計數

serve ima eight bsp sele content HR ali 同事 MSSQL中 float轉換為varchar 變成科學計數法解決方案 在系統初始化的時候,因為有同事,沒有在數值型的數據前面加上 單引號,導致進入數據庫後都變成float型我們需

科學計數中的尾數、基、指數

orm c語言 https 科學計數 med 參考 www 例子 exp 尾數英文名叫mantissa,significand,coefficient,用於科學計數法中。科學計數法的表示方法為: Mantissa x Base^Exponent 舉個例子,123.45用科學

1024 科學計數 (20)(20 分)

一個 code 編寫程序 正數 ret 及其 char clu main 1024 科學計數法 (20)(20 分) 科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正則表達式[+-][1-9]"."[0-9]+E[+-][0-9]+,即數字的整數部分只有

java double 轉換成 #.00 格式String 防止科學計數

public static String double2String(Double d){ return d==null? "0.00" : String.format("%.2f", d); } 在報文前邊加8位長度 public String dea

python3.x使用numpy,pandas時如何取消科學計數,顯示完整輸出(無省略號)

部落格1031 用python進行資料分析時,檢視資料,經常發生資料被自動顯示成科學記數法的模式,或者多行多列資料只顯示前後幾行幾列,中間都是省略號的情形。 彙總了下解決辦法,記錄: 環境如下: python version == 3.6 numpy version == 1.11.3

stata 日期科學計數的解決

for bsp 解決 day 面板 數值 lac 再次 rep 在向stata導入面板數據時,需要對日期格式進行統一,有時因為不同編譯軟件的問題,這時候會出現日期格式變為“2018/1/2”,而非“2018-01-02”;則該構造時間戳的時候可以: date = date(

怎麼通過poi將Excel中的科學計數正確匯入?

最近匯入excel表格的時候,因為excel表格中存在科學計數法,在使用poi匯入資料庫的時候,發現部分資料出現異常, 例如:3010102010100000000 在excel中表示為 3.0101E+18 ,選中在excel展示出來的資料是正確的,但是通過poi匯入資料 庫

JavaScript中科學計數轉化為數值字串形式

原文地址:https://www.css88.com/archives/9318 (受益匪淺) JavaScript 中經常會碰到數值計算問題,偶爾會在不經意間報一個不是bug的bug。今天來說說一個特殊的例子。我以0.0011BTC 價格買入 0.0002CZR 計算出了的金額是 0.00000022BT

從資料庫當中讀取Double型別資料,數值過大時會變成科學計數問題解決方案

這是問題所在.. 解決方案 Double dabo = 12345678.88d; DecimalFormat df = new DecimalFormat(); df.setMaximumFractionDigits(2);//這裡是小數位 String format = df