[語法] if判斷條件與double的(新手)問題

看板C_and_CPP (C/C++)作者 (Yolanda)時間16年前 (2009/05/03 18:33), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串1/1
最近初學程式,有些問題百思不得其解, 還請大大們解惑,謝謝。 (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

05/03 18:37, , 1F
1. double 型態要搭配 %lf 來做scanf和printf才會正確.
05/03 18:37, 1F

05/03 18:38, , 2F
2. 浮點數有精確度的問題, 最好別運算兩數直接判段相等.
05/03 18:38, 2F

05/03 18:40, , 3F
常見的作法是判斷兩數相減的絕對值小於某個容忍值.
05/03 18:40, 3F

05/03 18:50, , 4F
謝謝大大您的解惑。原來是要用%lf阿~ 感謝 ~
05/03 18:50, 4F

05/03 18:56, , 5F
所以判斷式的浮點數運算和之外的運算可能會不一囉?
05/03 18:56, 5F

05/03 19:03, , 6F
if(intA==intB) --> if(abs(dblA-dblB)<=DBL_EPSILON)
05/03 19:03, 6F
文章代碼(AID): #19_NC8RE (C_and_CPP)
文章代碼(AID): #19_NC8RE (C_and_CPP)