|
4 / 4 / 2
Регистрация: 05.02.2013
Сообщений: 441
|
|
Теряется точность при вычислении с double21.08.2015, 08:17. Показов 7169. Ответов 77
Метки нет (Все метки)
Доброго времени суток.
В процессе решения кубического уравнения, у меня теряется точность переменной типа double. Пробовал использовать TTmath.h результата не прибавило (возможно я её криво использовал). Короче говоря вещественный корень получается равный: z0 = 880256255399783.00 В matlab тот же самый алгоритм, так же даёт 880256255399783.00 А должен быть: z0 = 880256255399784.42497741663615572; - Этот корень получился в matlab с помощью функции solve() Я так понимаю это произошло из-за переполнение мантиссы double ? Которая для double не может превышать 2^53 - 1;
0
|
|
| 21.08.2015, 08:17 | |
|
Ответы с готовыми решениями:
77
При переводе string в long double теряется дробная часть Теряется точность Куда теряется точность? |
|
4 / 4 / 2
Регистрация: 05.02.2013
Сообщений: 441
|
|
| 22.08.2015, 14:36 [ТС] | |
|
среда: visual studio 2008
Ошибка выглядит как: Ошибка 1 fatal error C1083: Не удается открыть файл include: cstdint: No such file or directory ...
0
|
|
|
4 / 4 / 2
Регистрация: 05.02.2013
Сообщений: 441
|
|
| 22.08.2015, 14:47 [ТС] | |
|
Интернеты пишут, что нужна версия вижуала 2010.
Добавлено через 3 минуты Ну, как, тупо подключил и компилирую. dllлек понапихал в директорию с exe.
0
|
|
|
4 / 4 / 2
Регистрация: 05.02.2013
Сообщений: 441
|
|
| 22.08.2015, 20:33 [ТС] | |
|
castaway
Окей, хорошо, спасибо. Добавлено через 4 часа 1 минуту Так. На 2010 вижаке пошла родная. Завтра проект переделаю и посмотрю что получилось, а то уже 2 ночи. Добавлено через 1 час 27 минут castaway, Получил следующее: 880077597617981.680014345487783 Добавлено через 5 минут Правда решение всё равно ерунда.
0
|
|
|
4 / 4 / 2
Регистрация: 05.02.2013
Сообщений: 441
|
|
| 22.08.2015, 20:49 [ТС] | |
|
Получил на переделанных плюсах. Мне кажется что то не так с перемножение mpreal на литералы. У меня все литералы были с точка-ноль на конце (double), убрал .0 , так результат вообще фигня стал. Как показать что литералы надо использовать в типе mpreal. Там походу перегрузка есть для случая mpreal * double или double * mpreal Неужели везде надо рисовать (mpreal) ?
0
|
|
|
|
|||||||
| 22.08.2015, 21:00 | |||||||
Почему твой результат сильно отличается от моего в худшую сторону? Что ты там поменял?
0
|
|||||||
|
4 / 4 / 2
Регистрация: 05.02.2013
Сообщений: 441
|
|
| 22.08.2015, 21:07 [ТС] | |
|
Он не отличается в худшую сторону, начальные данные же тоже поменялись:
a3 = 1 b3 = -880077597617962.167593382130764494173848 5192981078436115279175943620552534535604 7917867112314723519028 c3 = -18127298795704362.3524434528991949934481 9654163134140223527689835040695841054271 1498191822494492184605 d3 = -93343885676543850.0845845182638239273902 9579527801268749666923282375181224948908 3447788097819314095504 Это для случая целочисленных литералов Вообще стоит выяснить ещё, в худшую сторону ли они поменялись.
0
|
|
|
|
||||||||||
| 22.08.2015, 21:26 | ||||||||||
|
У класса mpreal есть конструктор, принимающий строку.
Добавлено через 4 минуты
0
|
||||||||||
|
4 / 4 / 2
Регистрация: 05.02.2013
Сообщений: 441
|
||||||
| 22.08.2015, 21:37 [ТС] | ||||||
|
извини. до этих a3 b3 .. же тоже код есть, привожу кусок его.
Я для литералов double получаю: "880077597617981.68001434548778304718862 4817446575955902493913398259010308328973 38081916282618067009764" для целочисленных : "293359199205989.38919779404358816472461 6173099369281203842639198120685084484520 15972622370771574506342" вот тебе и на =)))
0
|
||||||
|
4 / 4 / 2
Регистрация: 05.02.2013
Сообщений: 441
|
|
| 22.08.2015, 21:56 [ТС] | |
|
Обернул все в mpfr::mpreal( ), гораздо ближе к правде.
mathcad вообще не может решить, комплекс выводит или ты про матлаб спрашиваешь? должно получиться два корня,т.е. два R и для какого то из них должно быть x = 0 z = 0
0
|
|
|
4 / 4 / 2
Регистрация: 05.02.2013
Сообщений: 441
|
|
| 22.08.2015, 22:15 [ТС] | |
|
x = ((B1*C2*g3-B2*C1*g3)*R[i]*R[i] -
(B1*C3*g2-B2*C3*g1-B3*C1*g2+B3*C2*g1)* R[i]+(B1*C2*f3-B1*C3*f2-B2*C1*f3+B2*C3*f1+B3*C1*f2-B3*C2*f1))/D1; // должно быть 0 y = (-(A1*C2*g3-A2*C1*g3)*R[i]*R[i] + (A1*C3*g2-A2*C3*g1-A3*C1*g2+A3*C2*g1)* R[i]-(A1*C2*f3-A1*C3*f2-A2*C1*f3+A2*C3*f1+A3*C1*f2-A3*C2*f1))/D1; z = ((A1*B2*g3-A2*B1*g3)*R[i]*R[i]- (A1*B3*g2-A2*B3*g1-A3*B1*g2+A3*B2*g1)* R[i]+(A1*B2*f3-A1*B3*f2-A2*B1*f3+A2*B3*f1+A3*B1*f2-A3*B2*f1))/D1; // должно быть 0 Ну или как можно ближе к нулю, сейчас x = -52.86 y = -6377872.65 z = 58069.85 Добавлено через 1 минуту Извини, просмотрел: a = 6378137.0; f = mpfr::mpreal(1.0) / 298.257223563; b = a*(1 - f); e = sqrt((a*a - b*b)/(a*a)); eps = sqrt((a*a - b*b)/(b*b)); c = mpfr::mpreal(299792458.0); pi = 3.1415926535897932; Добавлено через 7 минут Я предлагаю остановиться. В принципе точность получилось достаточной.
0
|
|
|
4 / 4 / 2
Регистрация: 05.02.2013
Сообщений: 441
|
|
| 22.08.2015, 22:24 [ТС] | |
|
castaway
Даже не знаю, как тебя благодарить. Спасибо огромнейшее за помощь, за дельные советы. Уверен, что найдётся ситуация где я смогу помочь тебе. ![]() ![]()
0
|
|
|
|
|
| 22.08.2015, 22:35 | |
|
Пожалуйста.
1
|
|
| 22.08.2015, 22:35 | |
|
Помогаю со студенческими работами здесь
78
Теряется точность в сравнении с exel Точность в double Точность вычислений у double Точность.Тип double Точность типа double Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|