浮點數比較大小的問題- IT閱讀

文章推薦指數: 80 %
投票人數:10人

浮點數比較大小,由於精度問題,所以直接比較有時可能會出錯。

單精度數7位有效數字。

(float) 雙精度數16位有效數字。

(double). 單精度數的尾數 ... 浮點數比較大小的問題 首頁 最新 HTML CSS JavaScript jQuery Python3 Python2 Java C C++ Go SQL 首頁 最新 Search 浮點數比較大小的問題 2018-12-01254 浮點數比較大小,由於精度問題,所以直接比較有時可能會出錯。

  單精度數7位有效數字。

(float)雙精度數16位有效數字。

(double)   單精度數的尾數用23位儲存,加上預設的小數點前的1位1,2^(23+1)=16777216。

因為10^7<16777216<10^8,所以說單精度浮點數的有效位數是7位。

雙精度的尾數用52位儲存,2^(52+1)=9007199254740992,10^16<9007199254740992<10^17,所以雙精度的有效位數是16位 單精度浮點數的實際有效精度為24位二進位制,這相當於24*log102≈7.2位10進位制的精度,所以平時我們說“單精度浮點數具有7位精度”。

(精度的理解:當從1.000...02變化為1.000...12時,變動範圍為2-23,考慮到因為四捨五入而得到的1倍精度提高,所以單精度浮點數可以反映2-24的數值變化,即24位二進位制精度) 單精度數7位有效數字。

雙精度數16位有效數字。

 浮點數取值範圍: 負數取值範圍為-3.4028235E+38到-1.401298E-45,正數取值範圍為1.401298E-45到3.4028235E+38。

 雙精度數取值範圍: 負值取值範圍-1.79769313486231570E+308到-4.94065645841246544E-324,正值取值範圍為4.94065645841246544E-324到1.79769313486231570E+308。

所以在比較的時候需要用一個很小的數值來進行比較。

(二分法的思想)當二者之差小於這個很小的數時,就認為二者是相等的了。

這個很小的數,稱為精度。

精度由計算過程中需求而定。

比如一個常用的精度為1e-6.也就是0.000001.所以對於兩個浮點數a,b,如果要比較大小,那麼常常會設定一個精度如果fabs(a-b)<=1e-6,那麼就是相等了。

fabs是求浮點數絕對值的函式。

類似的判斷大於的時候,就是if(a>b&&fabs(a-b)>1e-6)。

判斷小於的時候,就是if(a1e-6)。

例如:     #include #include constdoubleesp=1e-6; intmain() { doublea,b; scanf("%lf%lf",&a,&b); if(fabs(a-b)<=esp) printf("ok\n"); else printf("no\n"); return0; }   如有錯誤,還請指正,O(∩_∩)O謝謝 相關文章 浮點數比較大小的問題 浮點數比較大小 [python3Numpy填坑之旅]使用Numpy廣播機制實現陣列與數字比較大小的問題 mysql和sql時間欄位比較大小的問題 關於C++中字串是否可以比較大小的問題 java浮點數除法中零的問題 浮點數除法中零的問題 Python中字元和數字之間是怎麼比較大小的? 關於JavaScript中浮點數比較的問題 Java中的浮點數比較 shell中的浮點數比較 一個一元二次方程求解程式設計引申的兩個知識點(abs和fabs的區別以及浮點數比較相等) C/C++精度損失下的浮點數比較 三個整數比較大小 Python:整數比較大小和輸出 分類導航 HTML/CSS HTML教程 HTML5教程 CSS教程 CSS3教程 JavaScript JavaScript教程 jQuery教程 Node.js教程 服務端 Python教程 Python3教程 Linux教程 Docker教程 Ruby教程 Java教程 JSP教程 C教程 C++教程 Perl教程 Go教程 PHP教程 正則表達式 資料庫 SQL教程 MySQL教程 PostgreSQL教程 SQLite教程 MongoDB教程 Redis教程 Memcached教程 行動端 IOS教程 Swift教程 Advertisement 三度辭典 Copyright©2016-2021IT閱讀  Itread01.comAllRightsReserved. 0.001291036605835



請為這篇文章評分?