關於浮點數的小數部分計算

2021-01-09 電子產品世界

  收到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是一個二進位數。整數部分當然好計算,將每位的權值加起來即可。這位網友詢問的是小數部分的計算方法。其實也非常簡單。

  0.10001111010111000=2^(-1)+2^(-5)+2^(-6)+2^(-7)+2^(-8)+2^(-10)+2^(-12)+2^(-13)+2^(-14)=0.559998

  這個可以通過計算器來計算。但是小數後位數太多,容易出錯。我們可以編寫一段簡單的代碼來計算。代碼如下:

  #include

  #include

  char a[]="10001111010111000";

  void main( )

  {

  unsigned char i;

  double sum =0.0;

  printf("sum=");

  for( i =0 ; i< sizeof(a); i++)

  {

  if( a[i] =='1')

  {

  sum = sum + pow(2,-(i+1));

  printf("+2^(%d)",-(i+1));

  }

  }

  printf("\n%f\n", sum);

  }

  我這樣回答希望他明白!


相關焦點

  • 關於浮點數的細節問題
    1.計算機中浮點數的構成分為三個部分:符號位,指數位和小數位。符號位決定了這個浮點數的正負,指數位和小數位決定了這個浮點數的大小。2.IEEE為了讓浮點數可以表示所有的情況,所以把浮點數分為四種情況:規格化、非規格化、無窮大和NaN規格化是為了表示浮點數的一般情況。非規格化是為了表示0和非常接近0的浮點數。
  • 在編程中,為什麼要把小數叫做浮點數?
    小數為什麼會被成為浮點數?有不少程式設計師雖然能夠很熟練的使用某種程式語言,但是對於小數為什麼會被稱為浮點數卻是不太理解。小數為何會被叫做浮點數?雖然這些程式設計師對於小數被稱作浮點數的問題並不理解,但是這並不影響程式設計師編程,或者可以說這種問題對於一個程式設計師的編程能力絲毫沒有影響。
  • 適用於高精度單片機小數計算的方法介紹
    在單片機的BCD增量算式,線性化處理等過程中,都會遇到一個共同的問題,那就是小數的運算。在單片機當中,對於小數的表現方法一般只有兩種,一種是浮點數一種是定點數。本文就將對單片機中的浮點數進行概述並對其彙編程序設計進行介紹。
  • python浮點數表示專題及常見問題 - CSDN
    浮點數用來存儲計算機中的小數,與現實世界中的十進位小數不同的是,浮點數通過二進位的形式來表示一個小數。在深入了解浮點數的實現之前,先來看幾個 Python 浮點數計算有意思的例子:0.1 == 0.10000000000000000000001True0.1+0.1+0.1 == 0.3FalseIEEE 浮點數表示法這些看起來違反常識的「錯誤」並非 Python 的錯,而是由浮點數的規則所決定的,即使放到其它語言中結果也是這樣的
  • 小數在計算機中如何存儲?
    單精度浮點數32位=1位符號位+8位指數位+23位有效數字雙精度浮點數64位=1位符號位+11位指數位+52位有效數字下面以單精度浮點數為例(雙精度同理),來看看計算機是如何存儲的。指數位的範圍為0~255,但不包括0和255,因為它倆有特殊含義(下面會說到),因此單精度浮點數可表示的最大階數為127=254-127,最小階數為-126=1-127;有效數字:任何一個二進位的科學計數法(規格化)的係數第一位都是1,因此這個1沒有必要存儲,有效數字存儲的都是小數點後23位,因此23位有效數字可表示的精度卻是24位;符號位s指數位e有效數字m浮點數0、10000
  • 在單片機中的浮點數編程
    問題背景: 在使用8BIT單片機進行開發,不支持浮點數運算。但是開發必須用到sin,cos,arctan等浮點數函數。本文引用地址:http://www.eepw.com.cn/article/201611/318614.htm苦想了兩天,才發現,自己要當一回「計算機」。
  • 單片機浮點數的實用快速除法介紹
    在進行除法計算時,通常使用的方法是比較除法,即利用循環移位和減法操作來得到24~32位商,效率很低。這裡給出一種浮點數除法運算的實用快速算法。該方法以數值計算中的預估-修正方法為指導,充分利用了16位單片機的乘除法功能,很輕易地實現了浮點數的除法。  1 浮點數格式  IEEE的浮點數標準規定了單精度(4位元組)、雙精度(8位元組)和擴展精度(10位元組)三種浮點數的格式。
  • 每個C語言程式設計師都應該明白,計算機究竟是如何存儲小數的?
    IEEE-754浮點(32位)或雙精度(64位)有三個部分(在IEEE-854下也有類似的96位擴展精度格式):符號位,表示數字是正的還是負的;指數位;以及指定實際數字的尾數位。以C語言中的單精度浮點數為例,下面是某位浮點數的位布局:
  • php浮點數和字符串
    有關浮點數的細節1:浮點數不應直接進行大小比較!先看一個現象:可見:浮點數直接進行比較是「不可靠的」。原因是:浮點數在內存中的二進位形式(最底層的形式),是不精確的,比如:那如果需要(其實這很常見)進行浮點數比較,該怎麼辦?考慮現實應用所需的精度要求的基礎上,來講他們轉換為整數後進行比較!
  • Javascript每日一學-Javascript中關於浮點數運算的坑
    Javascript中的數字都是雙精度的浮點數。Javascript中的整數並不是一個獨立的數據類型,而是浮點數的一個子集。浮點數的坑我們直接看下面的一個例子。在瀏覽器的console控制臺上我們分別進行以下的浮點數運算。
  • 單片機浮點數的運算原理及表達方式
    打開APP 單片機浮點數的運算原理及表達方式 發表於 2019-04-18 15:38:39 單片機一般浮點數均採用士MxC的形式來表示
  • 學校裡學不到的C語言教程之6:可怕的浮點數
    我當然不會想這是因為我自己的實力站住了腳跟,他們不得不接納這位新人 :) 不論怎樣,他們都不希望我搞砸了我負責的那部分大家都遭殃。所以他告訴我的知識點都是很真誠的,這其中我印象最深的就是浮點數的問題,坦率地說無論我對他們的看法如何,沒有他告訴我,恐怕其中的問題我要兩三年後才會知道。這個問題其實他說得非常的簡單:程序裡不要使用 float,要用 double。這是為什麼?
  • 第19 p,了解Python中的數據類型,了解整數與浮點數
    大家好,我是楊數Tos,這是《從零基礎到大神》系列課程的第19篇文章,第二階段的課程:Python基礎知識:Python中的數據類型介紹及整數、浮點數的講解。學習本課程,建議先看一遍:【計算機基礎知識】課程。
  • 小數除法不會算?8大模塊梳理計算中的易錯點!備考期末滿分衝刺
    小數除法知識框圖一、除數是整數的小數除法1、小數除以整數:按照整數除法的計算方法計算,注意商的小數點要和被除數的小數點對齊。2、在小數除法中,如果除到被除數的末位仍有餘數,要在被除數小數部分的末尾添0,同時在餘數後面添0,然後繼續除,直到除盡為止。3、整數除以整數:一定要先點小數點,再添0,然後按照「小數除以整數」的計算方法計算。4、如果小數的整數部分不夠除,則在商的個位上商0佔位,對齊被除數的小數點,點上商的小數點,再繼續除,直到除盡為止。
  • 搞懂「小數」就好啦!
    一年級的娃還沒學過小數……已崩潰!說是元角分問題,實際上還是關於「小數」的應用!小數是小學必學的知識,它和分數以及百分數的關係都非常密切。小豌豆經常聽到爸媽的吐槽:同樣的題目換一種形式出現,娃就不會做了!小數的運用也是如此。有些娃的整數計算就六到飛起,碰到小數卻要思考半天,題目再簡單也容易出錯……該怎麼辦好呢?
  • 小數乘法的這3個問題,是孩子作業中出錯最多的
    上了一段時間的線上直播課,在批改作業的過程中,我發現孩子們在計算小數乘法的題目時,容易出現3種錯誤,並且這3種錯誤頑固不化,總是屢次三番地需要強調訂正。在此,列舉出來僅供大家參考。這一點曾經也強調了很多遍,孩子們才深深記住「豎式計算小數加減法,要把小數點對齊」;可小數乘法列豎式要求的是「把因數的末位對齊」(除了一個小數乘整十數時,要把0單獨對到右邊去,算積的時候直接把0落下來),這就和小數加減法列豎式的要求不同,所以就有學生出錯,這也是意料之中的事。後面需要把小數加減法和小數乘法的豎式專門拿出來作比較,讓孩子們清楚地明白兩者在對位上是不同的。