c++ - 使用蛮力求解方程

标签 c++ do-while brute-force algebra

我正在尝试通过蛮力求解一个非常简单的 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/

相关文章:

python - 与networkx的暴力图同构

c++ - 如何忽略 MSVC 中未初始化的变量错误

multithreading - 使用 UIButton 按下打破 Swift do-while 循环是否需要一个新线程?

c++ - 将 do/while 转换为并行 do/while 循环

security - 字典攻击下密码弱吗

python - Python 3.2 中的暴力破解脚本

c++ - 在处理顺序访问的对象时,链表与数组的性能相比?

c++ - 创建没有可调用对象的 boost::thread

c++ - C 中带有格式说明符的不同输出

c - 退出 do while 循环 C 时出错