[問題] 請問哪裡出問題>"<~

看板C_and_CPP (C/C++)作者 (唉~)時間16年前 (2009/04/14 17:06), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/1
原始檔:http://140.130.175.96/cal.c 執行檔:http://140.130.175.96/cal.exe double getreward(double v) { double reward_v = 0.0; double v_error = 0.0; double u = 0.6; double ideal_v = 5.0; v_error = ideal_v - v; printf("v_error= %f\n", v_error); v_error = fabs( v_error); printf("v_error1= %f\n", v_error); if(v_error <= u){ reward_v = 1;//u/(v_error+0.05) *2; } else { reward_v = 0 - v_error; } return reward_v; } int main(void) { double ran_v = 0; double reward = 0 ; int i = 0 ; for(i=1; i<=5 ; i++){ ran_v = 4.1 + i * 0.3 ; printf("ran_v= %f\n", ran_v); reward = getreward(ran_v); printf("reward= %f\n\n", reward); } system("pause"); } 我想請問的是 執行結果 ran_v = 4.4 v_error = 0.6 這個時候為什麼跑不進那個if迴圈中 但是 ran_v =5.6 v_error = 0.6 這個時候卻可以? 麻煩一下可以告訴我原因嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.130.175.96

04/14 17:22, , 1F
浮點數的精確度誤差問題?@@
04/14 17:22, 1F

04/14 18:15, , 2F
要不要改成相減 值如果在某非常小的範圍 就當成立?
04/14 18:15, 2F

04/14 18:15, , 3F
浮點數 你判斷是否相等 本來就不太好
04/14 18:15, 3F

04/14 18:18, , 4F
冼老師的浮點數教學好文! http://tinyurl.com/c3kwyy
04/14 18:18, 4F
文章代碼(AID): #19v58gHP (C_and_CPP)
文章代碼(AID): #19v58gHP (C_and_CPP)