2017-07-09 5 views
0

Mein Problem ist irgendwo in der Definition von first_x und second_x. Wenn ich die Funktion quad_eq aufrufen, bekomme ich eine -nan (ind) -Rückkehr basierend auf dem folgenden Code. Wenn ich den Methodenparameter .pushback() zu einer Literal-Ganzzahl ändere, erhalte ich diese Ganzzahl anstelle von NaN. Dies führt mich zu der Annahme, dass das Problem mit meiner Berechnung/Definition von first_x und second_x ist. Vielleicht gibt es einen C++ - Trick, den ich nicht sehe oder verstehe. Kann jemand sehen, was mein Problem ist? (Wenn dies hilft, arbeite ich von Bjarne Stroustrup C++ Principles and Practice Verwendung von C++, wo er mir die std_lib_facilities.h Datei gibt zu verwenden, wie ich Header noch nicht verstehen)Warum bekomme ich NaN, wenn ich ein Double bekommen sollte?

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

Ich glaube, du meintest 'b * b' statt' b * 2'. – Arcinde

+4

Ein NaN ist ein vollkommen legitimer Inhalt für ein Double. Vor allem, wenn Sie nicht auf die Werte achten, die Sie in bestimmte Vorgänge eingeben. – StoryTeller

+1

Mögliches Duplikat von [Quadratwurzel gibt keine Zahl in C++ zurück] (https://stackoverflow.com/questions/8950603/squareroot-returning-not-a-number-in-c) – GSerg

Antwort

4

Je nach Eingang, Sie sind Nimmt man die Quadratwurzel negativer Zahlen, so erhält man NaN (was tatsächlich ein Doppel ist), und alle anderen Operationen propagieren das.

Hinweis: Der angezeigte Code wird nicht so wie er ist kompiliert, da #include <vector> und using namespace std; fehlen. Letzteres ist normalerweise auch frowned upon.

+0

Mein Code wird kompiliert. Ich habe einen Header, der vom Autor dieses Buches geschrieben wurde, der sich damit beschäftigt, obwohl ich es noch nicht verstehe. Mein Problem ist etwas mit meiner Berechnung. Ich denke, dass es an dieser Stelle vielleicht meine Klammer ist. Ich setze absolut legitime quadratische Formeleingaben ein und sie kommen immer noch als NaN heraus, obwohl sie auf dem Papier herauskommen, wie sie sollten. – ObamaBinTrappin

+1

@ObamaBinTrappin 'b * b' ist nicht das gleiche wie' b * 2'. – melpomene

+0

Ja, danke. Ich habe das behoben, aber es hat das NaN-Problem nicht gelöst. – ObamaBinTrappin

Verwandte Themen