【发布时间】:2016-05-26 07:15:05
【问题描述】:
我之前问过这个问题,当我第一次问这个问题时,我不知道问题是什么,但我知道并且我已经尝试通读浮点数学是否损坏?以及为什么浮点数不准确?他们说明了问题的原因,但我并没有真正看到在我编写的代码中绕过这个问题,所以现在我问是否有人知道我应该对代码做什么以使程序工作。下面的代码和说明
这个程序背后的想法是找到两个双精度数 a 和 t 的值,如果它们相乘,它们会给出一个指定的值。因此,如果指定值为 4,则程序必须找到 a 和 t 的值,如果将它们相乘,则为 4。变量 t 的范围为 5 到 10。
我写了以下代码
int main(void)
{
double a = 0.01;
double t = 5;
while(1){
if(t * a != 4){
t = t + 0.01;
if(t > 10){
t = 5;
a = a + 0.01;
}
}
else if (t * a == 4){
break;
}
}
printf("%f %f", t, a);
return 0;
}
如果我尝试使用 0.01 递增值,代码似乎不起作用,尽管如果递增的值为 1,它会起作用。我知道发生这种情况的原因,但我将如何在这个程序代码中解决这个问题或者是还有其他方法可以编写代码吗?代码似乎永远循环
【问题讨论】:
-
请注意,"The code doesn't seem to work" 永远不足以描述问题。发生了什么?你预计会发生什么?
-
什么不起作用?你能说出你的期望和得到的吗?
-
t * a可能永远不会完全正确 4. 如果您阅读过“浮点数学是否被破坏”文章,您应该知道这一点。 -
您缺乏基本的调试技能。在 while 循环的开头插入
printf("%lf %lf %lf\n", t, a, t * a);,你会看到会发生什么。