如何證明 double 浮點數的精確度的有效位數
by 高顯忠, 2010-12-07 16:33, Views(3733)
請參考下面的 程式設計,
double 是八個 Bytes 的變數型態,
有 64個 bits, 第一個 bits 用來表示 浮點數的正負。
使用 11個 bits 來表示 浮點數的 數量級。
可以用來表示 (2^-1024) 到 (2^+1023) 範圍的 浮點數,
大概是 十進位數字的
(10^-308) 到 (10^308)
剩下的 52個 bits 是用來表示 浮點數的 內容。
所以,精確度可以到達 相對誤差:
(1.0)/(2^52), 也就是 十進位的
大概 16 - 17位的 有效位數。
#if 0
b= 4.14159265358979310000,
a= 3.14159265358979310000
Press [Esc] for stop! other key for continue...
b= 9007199771293056.000,
a= 9007199771293056.000
Press [Esc] for stop! other key for continue...
#endif
// ----------------------------------------------
#include "inc-01.h"
#include "sj-01.h"
#include "sj-02.h"
// ----------------------------------------------
int main()
{
double a, b;
a= 4.0*atan(1.0);
b= a + 1;// (a + 1) > a, so b > a
printf("\n b= %.20lf, \n a= %.20lf\n", b, a);
pause();
while (b > a) {
a= a*(1.0 + 1e-7);
b= a + 1.0;
}
// !(b > a), --> b <= a
printf("\n b= %.3lf, \n a= %.3lf\n", b, a);
pause();
return 0;
}// end of main()