2017-07-09 84 views
0

我的問題是在first_xsecond_x的定義中的某處。當我撥打quad_eq函數時,根據下面的代碼得到一個-nan(ind)返回值。如果我將.pushback()方法參數更改爲文字整數,我得到的是返回的整數而不是NaN。這使我相信問題出在我的計算/定義first_xsecond_x。也許C++有一些技巧我沒有看到或理解。任何人都可以看到我的問題是什麼? (如果這有助於我的工作出了Bjarne Stroustrup的C++原理與實踐使用C++,他給我的std_lib_facilities.h文件來使用,因爲我不明白,頭還)爲什麼我應該得到雙倍的NaN?

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; 
} 
+6

我認爲你的意思是'b * b'而不是'b * 2'。 – Arcinde

+4

NaN是一個完美合法的內容。特別是如果你不注意你進入某些操作的值。 – StoryTeller

+1

[Squareroot返回不是C++中的數字]的可能重複(https://stackoverflow.com/questions/8950603/squareroot-returning-not-a-number-in-c) – GSerg

回答

4

根據輸入,你是取負數的平方根,所以你得到了NaN(實際上是雙倍的),並且任何其他操作都會傳播它。

旁註:您顯示的代碼不會按原樣編譯,因爲它缺少#include <vector>using namespace std;。後者通常也是frowned upon

+0

我的代碼正在編譯。我有一本由本書作者撰寫的標題,即使我還不明白這一點。我的問題與我的計算有關。我在想這也許是我的括號。我正在輸入完全合法的二次方程式輸入,儘管他們在紙上出來,他們仍然以NaN出現,他們應該如何。 – ObamaBinTrappin

+1

@ObamaBinTrappin'b * b'與「b * 2」不一樣。 – melpomene

+0

是的,謝謝。我解決了這個問題,但它並沒有解決NaN問題。 – ObamaBinTrappin

相關問題