c語言題目,float精度問題

2021-06-18 05:23:27 字數 2401 閱讀 1159

編寫程式由下面的公式計算ex的值,精確到10e-10.

ex=1+x+x^2/2!+x^3/3!+x^4/4!+...

#include.

int main()

printf("ex=%lf\n",ex);

}程式能保證最乙個和項的值小於10e-10,間接達到了ex的精度為10e-10,這是程式設計的常用技巧之一。

#include

int main (void)

執行的結果就是 25.585,這個需要你取乙個小數點位數就精確了。。

------------------

不加 0.3的結果是25.584999 和加不加f沒關係..

但事實上來說  如果是12.585就是12.585000沒有問題了,好奇怪

#include

main()

輸出6.0

a=20.0/3

即使6.7了

#include

int main(void)

b=12345678.1111111111111111時,

輸出 float為12345678.00000000   『』;『』

double為12345678.111111112000      為什麼會是17個有效數字,2是**來的?

如果整數部分超過8位,b=12345678111.11111111111111111

float為12345677824.000000     第8位開始的數字是什麼?

double仍然為17個有效數字;

然後就是,兩個浮點數到底是有效數字保留幾位的?

在c/c++中,浮點型float用32位二進位制表示,十進位制有效數字為7位;double用64位二進位制表示,十進位制有效數字為16位。值得注意的是,無論 float還是double型,在機內都是按double運算的,區別只在輸出時的有效位數不同。當乙個數的實際長度不足要求的位數時,計算機會自動補足——但通常是乙個隨機數而不是全0……

c語言中,單精度型資料有效數字約是6~7位,數值範圍是約-3.4e-38——3.4e+38,怎麼得出來的???求解

這個比較複雜,建議你找一下ieee754標準看一下。 

這個簡單說一下吧:

在ieee754標準中進行了單精度浮點數(float)和雙精度數浮點數(double)的定義。float有32bit,double有64bit。它們的構成包括符號位、指數字和尾數字。

這些位的構成如下:

種類-------符號位-------------指數字----------------尾數字----

float---第31位(佔1bit)---第30-23位(佔8bit)----第22-0位(佔23bit)

double--第63位(佔1bit)---第62-52位(佔11bit)---第51-0位(佔52bit)

取值範圍主要看指數部分:

float的指數部分有8bit(2^8),由於是有符號型,所以得到對應的指數範圍-128~128。

double的指數部分有11bit(2^11),由於是有符號型,所以得到對應的指數範圍-1024~1024。

由於float的指數部分對應的指數範圍為-128~128,所以取值範圍為:

-2^128到2^128,約等於-3.4e38 — +3.4e38

精度(有效數字)主要看尾數字:

float的尾數字是23bit,對應7~8位十進位制數,所以有效數字有的編譯器是7位,也有的是8位

其實這些東西網上都能搜到,遇到不懂的,多在網上找下,希望能幫到你

追問

由於float的指數部分對應的指數範圍為-128~128,所以取值範圍為: 

-2^128到2^128,約等於-3.4e38 — +3.4e38

既然指數範圍是-128~128,為什麼取值範圍不是-10^128到10^128???而是-2^128到2^128,指數部分只是說指數範圍是這麼多,底數是10吧,能再詳細解釋一下嘛??非常感謝!!

回答

這個是你理解錯誤,float型別的儲存是按二進位制儲存的,指數部分也是按二進位制計算的。

追問

還是不明白,我知道資料都是按照二進位制儲存的,還是不懂怎麼來的,能舉例說明嗎,願聽高見!!非常感謝!!

回答

float型資料儲存是按照二進位制來的,包括指數,舉例來說:8.25,實際上是先轉換成二進位制的科學計數形式即1.0001*2^3,儲存是儲存的這個數,這樣說明白不?

提問者評價

謝謝

因為單精度數值占用4個位元組,就是32位

第1位表示正負,最後8位表示指數字

#include

#include

int main()

直接將float後面的小數部分cut掉

float精度問題

測試發現,0.99999999f 1f為true 不能用f1 f2來判斷兩個數相等,是因為雖然f1和f2在可能是兩個不同的數字,但是受到浮點數表示精度的限制,有可能會錯 單精度浮點數 float 是用來表示帶有小數部分的實數,表示範圍大,但是有不精確 不連續的特點。占用4個位元組 32位 儲存空間。...

double和float精度問題

遇到問題 後台返回的0.0008客戶端顯示的是科學計數法。解決 把後台返回的資料先轉成bigdecimal型別再保留指定小數 注意 返回的數必須大於0,不大於0時要先判斷,不然保留的小數字數多的話還會科學計數法顯示。當後台返回的是0,我這裡保留了9位小數,還是科學計數法顯示的。bigdecimal ...

C語言中魔性的float浮點數精度問題

如果你以前接觸過c語言,那麼對下面的這段 一定很熟悉 include int main void 相信很多人不用執行,能夠直接報出答案,f num1 21.75 f num2 13.45 f num1 f num2 35.2 無論是從常識還是理論角度都不難理解。下面我們執行一下程式,驗證我們的猜測正...