c++ - 二次方程 : negative discriminant in C++

标签 c++ math

如果这个问题很简单,我很抱歉,但我是 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/

相关文章:

algorithm - 比较两个点数组

c++ - 为什么我在开始绘制获取的交换链图像时不需要内存屏障?

c++ - std::partition 调用两次以进行快速排序

java - 代数到 html 转换器

math - 围绕一个点旋转 Vector2

Javascript 数学显示小数位

c++ - 为什么将增量运算符应用于常量变量时​​会出现编译器错误

c++ - 内联关键字与标题定义

c++ - std::function 是如何实现的?

javascript - 中值 JS 函数。错误的