【发布时间】:2014-07-18 02:26:50
【问题描述】:
我知道有很多关于这个问题的话题,但没有一个对我有帮助。我试图通过测试 -10 到 10 范围内的每个数字(带两位小数)来找到函数的根。我知道这可能不是最好的方法,但我是初学者,只想尝试一下。不知何故,循环不起作用,因为我总是得到 -10 作为输出。 无论如何,这是我的代码:
#include <iostream>
using namespace std;
double calc (double m,double n)
{
double x;
for (x=-10;x<10 && m*x+n==0; x+=0.01)
{
cout << x << endl;
}
return x;
}
int main()
{
double m, n, x;
cout << "......\n";
cin >> m; // gradient
cout << "........\n";
cin >> n; // y-intercept
x=calc(m,n); // using function to calculate
cout << ".......... " << x<< endl; //output solution
cout << "..............\n"; // Nothing of importance
return 0;
}
【问题讨论】:
-
尽量避免使用双精度/浮点数,并尽可能使用整数。所以像
for (x=-1000;x<1000 && m*(x/100)+n==0; x+=1)。然后在打印结果时可以将 x 的值除以 100。 -
我更新了我的答案,提供了一种解决方法。
-
您完全确定
m*x+n==0实际做了什么,是吗? -
但我认为整数只支持完整的数字,但我希望它更精确。哦,我已将 mx+n==0 更改为 mx+n!=0 现在它输出 10,所以没有任何改进
-
@ubuntu.stuff 您需要检查
std::numeric_limit::epsilon与0.0的区别才能做到这一点!见这里Compare double to zero using epsilon