浮點型資料 數值精度 取值範圍 完全不同的概念

2022-06-10 19:51:11 字數 1000 閱讀 2153

先來看個小程式:

#include int

main()

else

printf(

"%.30f\n

", a); //

這裡為了保證a輸出小數點後30位

return0;

}

執行結果為:

相等

3.141592653589793115997963468544

顯然a是可以取到千位pi,畢竟pi只是在3.14與3.15之間,這個數值當然在雙精度浮點型的所能表示的範圍內.所以不會出現錯誤. 但如果把"3."去掉,會顯示1415926535897932384....超過double的取值範圍

另乙個問題是:如果我們仔細看執行結果3.141592653589793115997963468544

會發現只有加粗的16位數字是準確的,後面的部分都是不準確的.

所以對應我們知道的,double的有效數字一般有15-16位,其餘部分都是不準確的.

同樣的可以測試float:

#include int

main()

else

printf(

"a = %.30f\n

", a);

return0;

}

執行結果為

不相等

a = 3.141592741012573242187500000000

我們會發現,結果是不相等,雖然我們讓a取了3.14159265,但是在計算機內部中卻是執行結果裡出現的a = 3.1415927410125732421875;

執行結果裡a =3.141592741012573242187500000000

只有加粗的7位是準確的,對應知道的:float型別的資料只有7-8位是有效的,其餘是不準確的.

浮點型資料的精度控制問題

time limit 1 sec memory limit 16 mb submit 2380 solved 392 submit status web board 兩點確定一條直線,判斷一條直線與乙個圓的位置關係。輸入中前兩行每行描述乙個點的座標 x,y x,y均為實數。第三行包含三個實數,即圓心...

浮點型資料精度丟失例項詳解

最近在學習資料型別的時候,遇到了浮點型資料精度丟失的問題,不是很理解,在這裡整理一下。將乙個十進位制浮點數轉變為二進位制,可以整數部分和小數部分分開來看。整數部分和十進位制整型資料轉二進位制的方法一樣,採用 除2取餘,逆序排列 法。具體做法是 用2去除十進位制整數,可以得到乙個商和餘數 再用2去除商...

iOS解析json 浮點型資料,精度丟失問題

服務端傳遞回來的是 保留小數點兩位的浮點型,ios端解析後,發現 取出欄位的doublevalue後 精度丟失,小數點後多了很多位 原值 71.20 解析後 71.199997 複製 原始資料 複製 import nsnumbertest.h nsstring const kbigdecimalnu...