作者kevintwo (MAI舞)
看板C_and_CPP
標題[問題] double 值比較大小
時間Fri Jan 29 03:10:01 2010
以下是小弟寫的一個開根號程式
//程式碼:
#include<stdio.h>
#include <stdlib.h>
int main(void)
{
double i,j,k;
printf("請輸入一個您想要開根號的值:");
scanf("%lf",&i);
printf("orign : %lf \n",i);
for(j=0;;j=j+0.1)
{
if( (j*j) >i)
{
printf("j: %lf , i: %lf \n",j*j,i); //印出來是 j: 16.00000 i: 16.00000
break;
}
}
k=j-0.1;
printf("您輸入的值經過開根號為:+%-lf\n",k);
// system("pause");
return 0;
}
問題:
不知為什麼 輸入 16 的情況下,它的結果不會是 4?
為什麼上面會在 j*j 和 i值一樣時,進入if裡呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.2.142
→ walker2009:浮點數不精確 運算會有誤差 01/29 05:09
→ walker2009:在做浮點數的 比較運算 時, 都要加上一個誤差值 01/29 05:10
→ walker2009:一般誤差值可以設定為 10^-5 或是 10^-7 01/29 05:11
→ walker2009:你把 %lf 全部改為 %.16lf 你就知道原因了 01/29 05:12
→ walker2009:把 if((j*j)>i) 改為 if((j*j)>i+1e-5) 就對了 01/29 05:16
→ walker2009:為什麼誤差是加在 > 後面,你仔細想想原因 01/29 05:17
→ kevintwo:謝謝這位熱心的朋友, 我懂了 01/29 05:41
推 cjoe:學到了一課 01/29 11:58