作者NAMESTANLY (唉~)
站内C_and_CPP
标题[问题] 请问哪里出问题>"<~
时间Tue Apr 14 17:06:49 2009
原始档:
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
1F:推 sawang:浮点数的精确度误差问题?@@ 04/14 17:22
2F:推 QQ29:要不要改成相减 值如果在某非常小的范围 就当成立? 04/14 18:15
3F:→ QQ29:浮点数 你判断是否相等 本来就不太好 04/14 18:15