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