我正在尝试通过蛮力求解一个非常简单的 C++ 方程式。基本思想是向上或向下运行 x 的值,直到等式的左边等于右边。我没有收到任何错误,但 x 的值始终为 0.01 或 -0.01。我假设我的 do/while 循环有缺陷,但你们可能都比我更有经验,所以任何帮助都将不胜感激。
#include <iostream>
using namespace std;
int main()
{
double x, y, z, q, w;
x = 0;
cout << "enter y*x + q = z*x + w in order of appearance" << endl;
cin >> y;
cin >> q;
cin >> z;
cin >> w;
if ((y-z)/(w-q) > 0) // checks if x is positive
{
do
{
(x = x + 0.01);
} while ((y * x + q) == (z * x + w));
}
else if ((y - z) / (w - q) < 0) // checks if x is negative
{
do
{
(x = x - 0.01);
} while ((y * x + q) == (z * x + w));
}
else
{
x = 0;
}
cout << "x is " << x << endl;
return 0;
}
谢谢!
最佳答案
一些事情。
首先,在比较 float 时,您可能希望在一个很小的范围内进行比较,通常称为 epsilon。这一点尤其正确,因为您正在以相当大的幅度递增 -- 0.01。您可能会跳过您想要的值。
我会做的是注意:
- 我离答案越来越近还是越来越远?
- 我是否跳过了答案?
部分代码:
float leftSide = y * x + q;
float rightSide = z * x + w;
float delta = leftSide - rightSide;
if (abs(delta) < epsilon) {
// You're really close
}
另请注意,如果 y 和 z 是相同的值,除非 q 和 w 也是相同的,否则这将永远不会起作用。
关于c++ - 使用蛮力求解方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58979935/