为什么我应该得到双打时得到 NaN?

Why am I getting NaN when I should be getting a double?

本文关键字:NaN 我应该得到 为什么      更新时间:2023-10-16

我的问题在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;
}

根据输入,你取负数的平方根,所以你得到 NaN(实际上是双精度(,任何其他操作都会传播它。

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