如果这个问题很简单,我很抱歉,但我是 C++ 的新手。我正在设计一个使用二次公式计算 2 个根的程序。但是,当我的判别式为负数时,我的程序不起作用。
#define _USE_MATH_DEFINES // for C++
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
int pointa;
int pointb;
int pointc;
int discriminant1;
float root1;
float root2;
cout << "Please enter a, b and c: ";
cin >> pointa;
cin >> pointb;
cin >> pointc;
discriminant1 = (pow(pointb, 2)) - (4 * pointa * pointc);
root1 = (-(pointb) + sqrt(discriminant1)) / (2 * pointa);
root2 = (-(pointb) - sqrt(discriminant1)) / (2 * pointa);
cout << "Root1 :" << root1 << endl;
cout << "Root2 :" << root2 << endl;
return 0;
主要问题是pointb
的输入。有没有办法强制 pointb
在对输入求平方时变成正数,就像在 TI-84 中添加括号一样?当输入-1这样的数字时,会导致整个公式失效。
最佳答案
要使用绝对值,您可以使用 abs()
来自 <cstdlib>
标题。
但是,据我了解,如果判别式为负,则仅表示无解。
因此,仅添加 if
可能是更好的解决方案如果判别式为正,则仅执行公式的那部分子句。
在更高级的数学中,负数的平方根在复平面上确实有答案。要获得此结果,您可以使用数据类型 complex<double>
并使用 sqrt()
的重载版本这需要一个复数。
关于c++ - 二次方程 : negative discriminant in C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32619920/