作者YolandaQueen (Yolanda)
看板C_and_CPP
標題[語法] if判斷條件與double的(新手)問題
時間Sun May 3 18:33:43 2009
最近初學程式,有些問題百思不得其解,
還請大大們解惑,謝謝。
(1) 請問 if 判斷條件放運算式或是資料型態上是不是有所限制?
以下面兩個程式碼為例,
第一個程式碼即使 multi 與 pow(n,((double)num)/2) 相等也會印出不相等
但是在第二個程式碼用另一個變數暫存 pow(n,((double)num)/2) 運算結果,
就可以印出相等結果,請問這是什麼原因呢?
第一個程式碼:
if(
multi == pow(n,((double)num)/2))
printf("相等 \n");
else
printf("不相等 \n");
第二個程式碼
double temp = pow(n,((double)num)/2);
if(
multi == temp)
printf("相等 \n");
else
printf("不相等 \n");
PS: multi 型態為 double、num 型態為 int
===============================================================
(2)
double num;
printf("Please enter one number > ");
scanf("%f",&num);
printf("num = %f \n",num);
請問為什麼輸入任一非零浮點數,例如 25.123,
印出來的卻都是 0.000000 ?
但若將 num 宣告成 float 就沒有問題,這到底是什麼原因呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.18.7
1F:推 VictorTom:1. double 型態要搭配 %lf 來做scanf和printf才會正確. 05/03 18:37
2F:→ VictorTom:2. 浮點數有精確度的問題, 最好別運算兩數直接判段相等. 05/03 18:38
3F:→ VictorTom: 常見的作法是判斷兩數相減的絕對值小於某個容忍值. 05/03 18:40
4F:→ YolandaQueen:謝謝大大您的解惑。原來是要用%lf阿~ 感謝 ~ 05/03 18:50
5F:→ YolandaQueen:所以判斷式的浮點數運算和之外的運算可能會不一囉? 05/03 18:56
6F:推 chrisdar:if(intA==intB) --> if(abs(dblA-dblB)<=DBL_EPSILON) 05/03 19:03