Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2021, 01:50   #1
Vlodislav
Новичок
Джуниор
 
Регистрация: 30.09.2021
Сообщений: 3
По умолчанию Кубическое уравнение

Добрый вечер, дана вот такая задачка, написал программу, используя формулу Кардано. При ее тестировании вводил значения: -765 10 -357 -406 и программа выдала: -nan(ind). Подскажите пожалуйста, что это за ошибка и как ее можно исправить.

Дано кубическое уравнение a*x3 + b*x2 + c*x + d = 0. Известно, что у этого уравнения ровно один корень. Требуется его найти.

Формат ввода
Во входных данных через пробел записаны четыре целых числа: -1000 < a, b, c, d < 1000.

Формат вывода
Выведите единственный корень уравнения с точностью не менее 4 знаков после десятичной точки.

Код программы на C++:
Код:
#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

double cube(double x, double n)
{
    return pow(x, 1 / n);
}

int main()
{
    double a, b, c, d;
    double x;

    cin >> a >> b >> c >> d;

    double p = (3 * a * c - pow(b, 2)) / (3 * pow(a, 2));
    double q = (2 * pow(b, 3) - 9 * a * b * c + 27 * pow(a, 2) * d) 
        / (27 * pow(a, 3));
    double Q = pow((p / 3), 3) + pow((q / 2), 2);

    if (Q >= 0)
    {
        double alfa = cube((-q / 2) + cube(Q, 2), 3);
        double beta = cube((-q / 2) - cube(Q, 2), 3);
        double y = alfa + beta;

        x = y - (b / (3 * a));
    }

    cout << fixed << setprecision(5) << x << endl;

    return 0;
}

Последний раз редактировалось Vlodislav; 27.10.2021 в 01:54.
Vlodislav вне форума Ответить с цитированием
Старый 27.10.2021, 02:36   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Не хочет pow извлекать клубни кубические из отриц. чисел.
Сделайте так , и будет -0.6188
Код:
double cube(double x, double n)
{
if (x>=0)  
 {return pow(x, 1 / n);} 
 else
 {return -pow(-x, 1 / n);} 
}
И вообще, кто ( или что ) вас заставляет писать 8 символов
Код:
pow(b,2)
вместо 3-х
Код:
b*b
type_Oleg вне форума Ответить с цитированием
Старый 28.10.2021, 13:42   #3
Vlodislav
Новичок
Джуниор
 
Регистрация: 30.09.2021
Сообщений: 3
По умолчанию

Благодарю за помочь!
Vlodislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кубическое уравнение методом Кардано PunyFlash Общие вопросы C/C++ 0 01.10.2015 00:11
Уравнение fkty Помощь студентам 2 21.03.2015 16:49
Уравнение Katrina* Паскаль, Turbo Pascal, PascalABC.NET 20 24.12.2011 14:50
уравнение Екатерина Воробей Паскаль, Turbo Pascal, PascalABC.NET 2 03.10.2011 18:42
Кубическое уравнение на Pascale evgeniyhbk Помощь студентам 12 21.09.2011 15:35