Я бы предложил несколько изменений в программе, которые устранят возникшие проблемы.
#include <iostream>
#include "std_lib_facilities.h"
// from a Github page by Bjarne Stroustrup that corresponds with the Programming: Practices and Principles book. Note that I am learning this on my own; it is not for homework.
#include <cmath>
double quafo1(double a, double b, double c) {
if ((b*b-4*a*c) < 0)
return sqrt(-1);
else
return ((b * -1) + sqrt((b * b) - (4 * a * c))) / (2 * a);
}
double quafo2(double a, double b, double c) {
if ((b*b-4*a*c) < 0)
return sqrt(-1);
else
return ((b * -1) - sqrt((b * b) - (4 * a * c))) / (2 * a);
}
double a;
double b;
double c;
int main()
{
cout << "This program will solve a quadratic equation as long as one or more real solutions are possible. Please enter values for a, b, and c (separated by spaces and followed by enter, e.g. 3 5 4), after which both possible answers for x will be provided. Please note that a cannot equal 0.\n";
while (cin >> a >> b >> c) {
double s1 = quafo1(a,b,c),
s2 = quafo2(a,b,c);
if (s1==s1 && s2==s2)
cout << "The two possible real solutions to this problem are " << s1 << " and " << s2 << '.' << endl;
else
cout << "There is no real solution to that quadratic equation. Please enter a different set of numbers." << endl;
}
}
Прежде всего, как уже упоминалось выше @Adrian, вам нужно проверить, является ли b*b-4*a*c
отрицательным или не и не его квадрат root.
Во-вторых, функция должна возвращать что-либо во всех случаях. Следовательно, вы должны иметь инструкцию возврата, когда нет реальных решений. В этих случаях вы можете просто вернуть NaN. Один из способов сделать это - вернуть sqrt(-1)
как я. Фактически, вы можете просто вернуть решение в уравнение квадратичного c, которое будет равно NaN, если никакие реальные решения невозможны, поскольку задействован квадрат root из b*b-4*a*c
.
Теперь в main
вы можете проверить, является ли возвращаемое значение NaN. Чтобы проверить это, вы можете использовать isnan()
или проверить, равно ли оно себе, что я и сделал здесь. Я надеюсь, что это решит вашу проблему.