先來看個小程式:
#include intmain()
else
printf(
"%.30f\n
", a); //
這裡為了保證a輸出小數點後30位
return0;
}
執行結果為:
顯然a是可以取到千位pi,畢竟pi只是在3.14與3.15之間,這個數值當然在雙精度浮點型的所能表示的範圍內.所以不會出現錯誤. 但如果把"3."去掉,會顯示1415926535897932384....超過double的取值範圍相等3.141592653589793115997963468544
另乙個問題是:如果我們仔細看執行結果3.141592653589793115997963468544
會發現只有加粗的16位數字是準確的,後面的部分都是不準確的.
所以對應我們知道的,double的有效數字一般有15-16位,其餘部分都是不準確的.
同樣的可以測試float:
#include intmain()
else
printf(
"a = %.30f\n
", a);
return0;
}
執行結果為
不相等我們會發現,結果是不相等,雖然我們讓a取了3.14159265,但是在計算機內部中卻是執行結果裡出現的a = 3.1415927410125732421875;a = 3.141592741012573242187500000000
執行結果裡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...