|
4 / 4 / 2
Регистрация: 05.02.2013
Сообщений: 441
|
|
Теряется точность при вычислении с double21.08.2015, 08:17. Показов 7925. Ответов 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 | |
|
Теряется точность в сравнении с exel Точность в double Точность вычислений у double Точность.Тип double Точность типа double Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2.
Задача:
Обеспечить запись документа в регистр сведений независимо от. . .
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|