Я закодировал "метод деления пополам", но он работает вечно, пожалуйста, помогите мне, большое спасибо мой код, просто найти ближайший корень x ^ 3 + 4 * x ^ 2-10, думаю, он остановится через 14 раз, но это не так (я пробую a и b как 1 и 2)
void bis(double a, double b)
{
cout << fixed << setprecision(8);
double x = (a + b) / 2;
double result = pow(x, 3) + 4 * pow(x, 2) - 10;
int n = 0;
while (abs(result) > 0,0001) {
x = (a + b) / 2;
result = pow(x, 3) + 4 * pow(x, 2) - 10;
if (pow(a, 3) + 4 * pow(a, 2) - 10 > 0 && pow(b, 3) + 4 * pow(b, 2) - 10 < 0) {
n++;
if (result > 0) {
cout << n << " " << a << " " << b << " " << x << " " << result << endl;
a = x;
} else if (result < 0) {
cout << n << " " << a << " " << b << " " << x << " " << result << endl;
b = x;
}
}
if (pow(a, 3) + 4 * pow(a, 2) - 10 < 0 && pow(b, 3) + 4 * pow(b, 2) - 10 > 0) {
n++;
if (result > 0) {
cout << n << " " << a << " " << b << " " << x << " " << result << endl;
b = x;
} else if (result < 0) {
cout << n << " " << a << " " << b << " " << x << " " << result << endl;
a = x;
}
}
}
}
дасссссс, что это, 0,0001, он перестает работать бесконечное количество раз, спасибо, но я все еще не понимаю, что использую pow (10, -4), он все еще работает бесконечно?
Это из-за оператора запятой: abs(result)>0,0001
понимается как (abs(result)>0), 001
: левая часть запятой отбрасывается после оценки, и остается только правая часть 001
.
0,0001
Вы, вероятно, хотели написать литералdouble
:0.0001
. В противном случае ваше состояние равноwhile (abs(result) > 1)