Форум программистов, компьютерный форум CyberForum.ru

Проверить правильность вычисления по формулам - C++

Восстановить пароль Регистрация
 
 
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
15.03.2014, 19:04     Проверить правильность вычисления по формулам #1
Правильно я записал формулы?
Вернее я точно знаю что нет, где ошибка?))
C++
1
2
3
4
5
6
7
{
        u=sqrt(sqrt((-q/2)+sqrt(d)));
        v=(-p)/(3*u);
        y1=u+v;
        y2=((-u+v)/2)+((sqrt(3)*(u-v))/2);
        y3=((-u+v)/2)-((sqrt(3)*(u-v))/2);
    }
http://www.cyberforum.ru/cgi-bin/latex.cgi?u=\sqrt[3]{(\frac{-q}{2})+\sqrt{d}}
http://www.cyberforum.ru/cgi-bin/latex.cgi?v=\frac{-p}{3u}
y1=u+v
http://www.cyberforum.ru/cgi-bin/latex.cgi?y2=\frac{u+v}{-2}+\frac{\sqrt{3}(u-v)}{2}
http://www.cyberforum.ru/cgi-bin/latex.cgi?y3=\frac{u+v}{-2}-\frac{\sqrt{3}(u-v)}{2}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2014, 19:04     Проверить правильность вычисления по формулам
Посмотрите здесь:

Вычисления по формулам C++
Проверить код на правильность C++
C++ Проверить правильность задания №2
вычисления по формулам. использование стандартных математических функций в c++ C++
Вычисления по формулам C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
agent008
1 / 1 / 0
Регистрация: 15.03.2014
Сообщений: 118
15.03.2014, 19:08     Проверить правильность вычисления по формулам #2
Корень записивается через pow() а не sqrt()
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 19:10     Проверить правильность вычисления по формулам #3
неправильно только первое. Действительно, корень 3-го порядка - это не корень из корня, а число в степени 1/3
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
15.03.2014, 19:11  [ТС]     Проверить правильность вычисления по формулам #4
C++
1
2
3
4
5
6
7
{
        r=sqrt(((-p)*p*p)/27);
        fi=acos((-q)/2*r);
        y1=2*sqrt(sqrt(r))*cos(fi/3);
        y1=2*sqrt(sqrt(r))*cos((fi+2*M_PI)/3);
        y1=2*sqrt(sqrt(r))*cos((fi+4*M_PI)/3);
}
http://www.cyberforum.ru/cgi-bin/latex.cgi?r=\sqrt{\frac{{-p}^{3}}{27}}
http://www.cyberforum.ru/cgi-bin/latex.cgi?fi=arccos(\frac{-q}{2r})
http://www.cyberforum.ru/cgi-bin/latex.cgi?y1=2\left|\sqrt[3]{r} \right|cos(\frac{fi}{3})
http://www.cyberforum.ru/cgi-bin/latex.cgi?y1=2\left|\sqrt[3]{r} \right|cos(\frac{fi+2\pi }{3})
http://www.cyberforum.ru/cgi-bin/latex.cgi?y1=2\left|\sqrt[3]{r} \right|cos(\frac{fi+4\pi }{3})
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 19:13     Проверить правильность вычисления по формулам #5
C++
1
fi=acos((-q)/2*r);
->
C++
1
fi=acos((-q)/2/r);
+ те же ошибки с корнем 3-го порядка
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
15.03.2014, 19:13  [ТС]     Проверить правильность вычисления по формулам #6
Цитата Сообщение от saden Посмотреть сообщение
Действительно, корень 3-го порядка - это не корень из корня, а число в степени 1/3
хм... просто навыходе мне вообще пишет например y1= nan
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 19:14     Проверить правильность вычисления по формулам #7
возможно, попадается корень из отрицательного числа
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
15.03.2014, 19:15     Проверить правильность вычисления по формулам #8
#QNAN
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
15.03.2014, 21:30  [ТС]     Проверить правильность вычисления по формулам #9
Цитата Сообщение от Esecman Посмотреть сообщение
#QNAN
И что это значит?

Добавлено через 1 час 35 минут
ну так как правильно записать???

Добавлено через 42 секунды
ппц куча ответов и ничего конкретного(

Добавлено через 3 минуты
agent008, как правильно прописать pow() ?
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 21:31     Проверить правильность вычисления по формулам #10
http://www.cyberforum.ru/cgi-bin/latex.cgi?y=\sqrt[3]{x}=x^{\frac13}=e^{\frac{\ln{x}}3}
C++
1
y=exp(ln(x)/3)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
15.03.2014, 21:33     Проверить правильность вычисления по формулам #11
Цитата Сообщение от andreyananas Посмотреть сообщение
хм... просто навыходе мне вообще пишет например y1= nan
Цитата Сообщение от saden Посмотреть сообщение
возможно, попадается корень из отрицательного числа
ну дак при квадратном корне и будет ошибка, а при третьей степени нет
Цитата Сообщение от andreyananas Посмотреть сообщение
ну так как правильно записать???
тебе сто раз уже сказали
вместо
Цитата Сообщение от andreyananas Посмотреть сообщение
u=sqrt(sqrt((-q/2)+sqrt(d)));
C++
1
u=pow ( ((-q/2)+sqrt(d)),1.0/3.0);
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
15.03.2014, 21:43     Проверить правильность вычисления по формулам #12
C++
1
#include <math.h>
И не ln, а log
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
15.03.2014, 21:46  [ТС]     Проверить правильность вычисления по формулам #13
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
u=pow ( ((-q/2)+sqrt(d)),1.0/3.0)
;
не работает, проверял на простом примере.
C++
1
2
3
a=81
a=pow((a),1.0/3.0);
cout << a;
выбивает 4.9347...
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 21:47     Проверить правильность вычисления по формулам #14
а сколько должно быть?
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
15.03.2014, 21:49  [ТС]     Проверить правильность вычисления по формулам #15
Цитата Сообщение от saden Посмотреть сообщение
а сколько должно быть?
а разве не 3???
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 21:50     Проверить правильность вычисления по формулам #16
не, это для 27
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
15.03.2014, 21:52     Проверить правильность вычисления по формулам #17
Цитата Сообщение от saden Посмотреть сообщение
а сколько должно быть?
4,3267487109222251469649149323403(калькулятор сказал)
4.9 это уже близко к 5 а 53=125
сейчас загружу компилятор и проверю
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
15.03.2014, 22:03  [ТС]     Проверить правильность вычисления по формулам #18
Цитата Сообщение от ValeryS Посмотреть сообщение
4,3267487109222251469649149323403(калькулятор сказал)
4.9 это уже близко к 5 а 53=125
сейчас загружу компилятор и проверю
Да все норм, я наночь глядя ступил с 81... надо было 27 писать)))

Добавлено через 7 минут
в итоге все равно пишет y1= "nan"

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <math.h>
#include <cmath>
 
using namespace std;
 
int main()
{
    float a, b, c, p, q, y1, y2, y3, d, u, v, r, fi;
    cout << "This program unleashes the cubic equation\n";
    cout << "Enter a factor - a:\n";
    cin >> a;
    cout << "Enter a factor - b:\n";
    cin >> b;
    cout << "Enter a factor - c:\n";
    cin >> c;
    cout << "x^3+" << a << "x^2+" << b << "x+" << c << "=0\n";
    p=b-(a*a/3);
    q=((2*(a*a*a))/27)-((a*b)/3)+c;
    d=((p*p*p)/27)+((q*q)/4);
    if (d>0)
    {
        u=pow(((-q/2)+sqrt(d)),1.0/3.0);
        v=(-p)/(3*u);
        y1=u+v;
        y2=((-u+v)/2)+((sqrt(3)*(u-v))/2);
        y3=((-u+v)/2)-((sqrt(3)*(u-v))/2);
    }
    if (d==0)
    {
        y1=(3*q)/p;
        y2=y3=((-3)*q)/2*p;
    }
    if (d<0)
    {
        r=sqrt(((-p)*p*p)/27);
        fi=acos((-q)/2*r);
        y1=2*pow((r),1.0/3.0)*cos(fi/3);
        y1=2*pow((r),1.0/3.0)*cos((fi+2*M_PI)/3);
        y1=2*pow((r),1.0/3.0)*cos((fi+4*M_PI)/3);
    }
    cout << y1;
}
вот код программы
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
15.03.2014, 22:08     Проверить правильность вычисления по формулам #19
в математике корень от отрицательного числа считается неопределенным. Даже нечетного порядка.

Не могу сказать, реализовано ли это в библиотеках С++, но попробуйте разделить отрицательные значения через if

Добавлено через 1 минуту
кстати, судя по коду d может быть отрицательным, а от него берецца квадратный корень

Добавлено через 1 минуту
Не, виноват, не досмотрел...
Проверяй знаки, пока на примете р
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2014, 22:14     Проверить правильность вычисления по формулам
Еще ссылки по теме:

Вычисления по известным формулам C++
C++ Вычисления по формулам
Проверить код на правильность C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
15.03.2014, 22:14     Проверить правильность вычисления по формулам #20
итак VS 2008
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <math.h>
 
int main()
{
double a=81;
a=pow((a),1.0/3.0);
std::cout << a;
 return 0;
}
ответ 4.32675
не знаю откуда у тебя
Цитата Сообщение от andreyananas Посмотреть сообщение
выбивает 4.9347...
взялось

Добавлено через 3 минуты
Цитата Сообщение от andreyananas Посмотреть сообщение
в итоге все равно пишет y1= "nan"
пройди в Дебагере по шагам
или выводи на экран все промежуточные вычисления
есть подозрение что
Цитата Сообщение от andreyananas Посмотреть сообщение
d=((p*p*p)/27)+((q*q)/4);
отрицательное
а от него корень берется
"nan" в переводе на русский язык невозможное число

Добавлено через 2 минуты
Цитата Сообщение от andreyananas Посмотреть сообщение
float a, b, c, p, q, y1, y2, y3, d, u, v, r, fi;
поменяй на double
Yandex
Объявления
15.03.2014, 22:14     Проверить правильность вычисления по формулам
Ответ Создать тему
Опции темы

Текущее время: 03:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru