为什么我应该在获得双倍时获得NaN?

时间:2017-07-09 06:35:30

标签: c++

我的问题出现在first_xsecond_x的定义中。当我调用quad_eq函数时,我会根据下面的代码获得-nan(ind)返回。如果我将.pushback()方法参数更改为文字整数,则返回返回的整数而不是NaN。这让我相信问题在于我对first_xsecond_x的计算/定义。也许有一些我没有看到或理解的C ++技巧。任何人都可以看到我的问题是什么? (如果这有助于我使用Bjarne Stroustrup的C ++原理和练习使用C ++,他给我使用std_lib_facilities.h文件,因为我还不理解标题)

vector<double>quad_eq(double a, double b, double c) {
    vector<double>answers;
    double first_x = (-b + sqrt((b * 2) - (4 * a * c))) / 2 * a;
    double second_x = (-b - sqrt((b * 2) - (4 * a * c))) / 2 * a;
    answers.push_back(first_x);
    answers.push_back(second_x);
    return answers;
}

1 个答案:

答案 0 :(得分:4)

根据输入的不同,您将获取负数的平方根,因此您可以获得NaN(实际上是一个双精度数),并且任何其他操作都会传播。

旁注:您显示的代码不按原样编译,因为它缺少#include <vector>using namespace std;。后者通常也是frowned upon