C++ Builder > увеличение точности вычислений
---
...Я работаю антинаучным аферистом...
![](/images/graemlins/smile.gif)
$ find /lib | grep gmp
/lib/engines/libgmp.so
/lib/libgmp.dll.a
/lib/libgmp.la
/lib/libgmpxx.dll.a
/lib/libgmpxx.la
$ uname -s
CYGWIN_NT-5.1
А вообще, если твой приплюснутый компилятор стандартный,
то библиотека должна собраться и им.
Возможно, что кто-то занимался сборкой, попробуй погуглять.
---
...Я работаю антинаучным аферистом...
![](/images/graemlins/confused.gif)
Для любой физической задачи использования long double хватает за глаза. точность - 21 знак
Если думается, что задача считается неверно из-за того, что точности не хватает и типа там, где должен быть ноль получаются числа порядка 1Е-15, то нужно отбросить такие крамольные мысли.
Иногда --- 15.
На самом деле, есть физические задачи, когда этого может не хватать.
---
...Я работаю антинаучным аферистом...
...И в этих случаях помогает немного подумать и поменять способ расчёта.
---
...Я работаю антинаучным аферистом...
Но может и не помочь. Пример: Суммирование знакопеременных рядов с членами, на много порядков большими (по модулю) суммы ряда. Если суммировать приходится "в лоб", то без многозначной арифметики не обойтись.
для long double - 10 байт - точность 21 знак.
---
именно что нужно сначала подумать, а уж потом искать длинную арифметику
А 10-байтовое long double - это вообще борландовское изобретение, непонятно для чего сделанное. Существенно точность все равно не увеличивает. Пользуйте библиотеки работы с большими числами и нормальный компилятор. Builder пригоден (причем ограниченно) только для написания гуев.
возник другой вопрос - есть ли библиотеки в которых реализована работа с комплексными числами (также с большой точностью) ?
Это уже не наглая ложь, а просто гон.
---
...Я работаю антинаучным аферистом...
Это для 80-разрядных IEEE 754.
> для long double - 10 байт - точность 21 знак.
21 - 5 = 16.
Почему "5"?
Потому что так устроен мир: ошибки имеют свойство накапливаться.
Иногда эти 5 порядков превращаются и в 6.
> именно что нужно сначала подумать, а уж потом искать длинную арифметику
Иногда есть о чём подумать, кроме усовершенствования способа расчёта.
---
...Я работаю антинаучным аферистом...
IEEE Standard 754 for Binary Floating-Point Arithmetic
Format Min. Subnormal Min. Normal Max. Finite 2^-N Significant digits
Single: 1.4E-45 1.2 E-38 3.4 E38 5.96E-8 6-9
Double: 4.9E-324 2.2 E-308 1.8 E308 1.11E-16 15-17
Extended: 3.6 E-4951 3.4 E-4932 1.2E4932 5.42 E-20 18 - 21
Отсутствуют сведения о разрядности мантиссы.
Ну да ладно.
В твоей сводке приведены предельно достижимые погрешности,
это для того, чтобы хранить числа.
Но даже в самых простых вычислениях теряется до половины последнего знака.
Или даже больше.
А если есть решение линейной системы, теряется уже два знака,
если есть простейшая оптимизация --- три или даже четыре.
Бывают, конечно, отклонения, подгонометрия всегда, за исключением малоинтересных случаев,
идёт с элементом удачи, но отклонения наблюдаются чаще в сторону больших потерь точности.
---
"И опыт, сын ошибок..."
гуглом удалось найти только платные...
Например, по GAMS?
---
...Я работаю антинаучным аферистом...
Честно говоря:
1) довольно мало времени потратил на поиск (просто пока его не было из опенсорсов смотрел только Boost - там не нашел (но возможно нужно получше поискать)
2) к программированию не имею отношения -> не разбираюсь в том, где можно поискать.
Поэтому: 1) извиняюсь, что отнимаю чужое время,
НО 2) буду благодарен, если кто-нибудь подскажет набор ресурсов где можно поискать, или непосредственно ссылку.
Есть FAQ "Study".
---
...Я работаю антинаучным аферистом...
Оставить комментарий
AndrewNew
Существуют ли библиотеки, которые можно использовать в С++ Builder'е для увеличения точности операций с плавающей запятой до 30 знаков?