c++ - 在 C++ 中求解二次方程

标签 c++ math equation quadratic

我正在尝试用 C++ 编写一个函数,使用二次方程求解 X。这是我最初写的,只要没有复杂的数字作为答案,它似乎就可以工作:

float solution1 = (float)(-1.0 * b) + (sqrt((b * b) - (4 * a * c)));
solution1 = solution1 / (2*a);

cout << "Solution 1: " << solution1 << endl;

float solution2 = (float)(-b) - (sqrt((b*b) - (4 * a * c)));
solution2 = solution2 / (2*a);
cout << "Solution 2: " << solution2;

例如,如果我使用等式:x^2 - x - 6,我会正确地得到解 3, -2。

我的问题是我将如何解释复数....例如,给定等式:

x^2 + 2x + 5

手动求解,我会得到 -1 + 2i,-1 - 2i。

好吧,我想有两个问题,我可以把上面的写得更好,同时也考虑到复数吗?

感谢您的帮助!

最佳答案

所有这一切的重要说明。这些回复和原始问题中显示的解决方案并不可靠。

众所周知的解决方案 (-b +- sqrt(b^2 - 4ac))/2aac 非常大的情况下在计算中是不稳健的small compered to b^2,因为一个是减去两个非常相似的值。最好对另一个根使用鲜为人知的解决方案 2c/(-b -+ sqrt(b^2 -4ac))

稳健的解决方案可以计算为:

temp = -0.5 * (b + sign(b) * sqrt(b*b - 4*a*c);
x1 = temp / a;
x2 = c / temp;

使用 sign(b) 确保我们不会减去两个相似的值。

对于 OP,将其修改为复数,如其他海报所示。

关于c++ - 在 C++ 中求解二次方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/898076/

相关文章:

c++ - 求两个 vector 方程的交集

c - 我想将两个模块合二为一。第一个是方程;第二个取该方程的积分

c++ - 函数的静态和动态父级

c++ - 这是 C++ 中有效的二维数组定义吗?

c++ - 如何使用 Strtok 对 Const char* 进行标记?

r - 两个未知数的线性方程组

math - 如何找到 X1、X2、Y1、Y2 的 Y 截距

c++ - C++11、14 或 17 是否提供了一种从 decltype() 中获取参数的方法?

scala - 使用 Scala 的数字和小数进行更高级的数学运算

ruby - 无法总结 ruby 整数