C 编写一个程序,确定两个变量的值等于一个特定值
我以前问过这个问题,当我第一次问这个问题时,我不知道问题是什么,但我知道并且我已经试着通读了浮点数学是不是坏了?为什么浮点数不准确?他们说明了问题的原因,但我没有在我编写的代码中真正看到绕过这个问题的方法,所以现在我问是否有人知道我应该如何处理代码以使程序工作。下面是代码和说明 这个程序的思想是找到两个双精度C 编写一个程序,确定两个变量的值等于一个特定值,c,increment,C,Increment,我以前问过这个问题,当我第一次问这个问题时,我不知道问题是什么,但我知道并且我已经试着通读了浮点数学是不是坏了?为什么浮点数不准确?他们说明了问题的原因,但我没有在我编写的代码中真正看到绕过这个问题的方法,所以现在我问是否有人知道我应该如何处理代码以使程序工作。下面是代码和说明 这个程序的思想是找到两个双精度a和t的值,如果它们相乘,就会得到一个指定的值。因此,如果指定值为4,程序必须找到a和t的值,如果将它们相乘,则会得到4。变量t在5到10之间 我编写了以下代码 int main(void)
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,代码就起作用。我知道发生这种情况的原因,但是我如何在这个程序代码中解决这个问题,或者是否有其他方法可以编写代码?。代码似乎永远循环如果
a
*t
是4,那么a
将是4/t
。现在,如果t
在5到10之间,并且可以取值5.1、5.2等,那么a
将为t
的每个值都有一个相应的值
i、 e.对于t=5.1 a=0.78431
对于t=5.2A=0.7692
您可以运行循环,为t
t = 5.0;
for (i=0; i<50; i++)
{
t += 0.1;
a = 4/t;
printf ("%f %f",a,t);
}
t=5.0;
对于(i=0;i而不是使用两个双精度之间的相等,使用较小的范围
#include <math.h>
#include <stdio.h>
int main(void)
{
double a = 0.01;
double t = 5.0;
double epsilon = 0.000001;
while(1){
if(fabs(t * a - 4.0) < epsilon){
break;
}
else{
t = t + 0.01;
if(t > 10){
t = 5;
a = a + 0.01;
}
}
}
printf("%f %f %f", t, a, a*t);
return 0;
}
#包括
#包括
内部主(空)
{
双a=0.01;
双t=5.0;
双ε=0.000001;
而(1){
if(fabs(t*a-4.0)10){
t=5;
a=a+0.01;
}
}
}
printf(“%f%f%f”,t,a,a*t);
返回0;
}
请注意,fabs(x-y)
相当于(y-epsilon)
,因此您正在检查x
是否在y周围的一个非常小的间隔内下降。请注意,“代码似乎不起作用”从来没有足够的问题描述。发生了什么?你期望发生什么?什么不起作用?你能说出你期望的和你得到的吗?t*a
可能永远不会告诉我确切的4.如果你读过“浮点数学坏了吗”文章你应该知道。你缺乏基本的调试技巧。插入printf(“%lf%lf%lf\n”,t,a,t*a);
在while循环的开始,你会看到发生了什么。虽然这个答案确实解决了这个特定的问题,但这类似于给OP一条鱼,而不是教他们如何捕捉它。问题实际上是如何确定一般的FP等式,而不是解决a*t==4
给定的5