Sagittarius
Искусственный Интеллект
(138387)
7 лет назад
Если проблема в накапливающихся ошибках вычисления, то можно использовать любой язык программирования в котором есть библиотека big_math. Название условное. В разных языках она может называться по своему. Однако, суть проста. Вместо real, float или extended вы используете класс в котором кранится массив цифр достаточной длины. Понятно, что работает это намного медленней, чем вычисления с использованием обычных вещественных типов (real, float или extended), однако таким образом вы может поднять точность там, где она действительно нужна.
Сначала поищите библиотеку на языке, которым вы хорошо владеете. Можно попробовать пакет Wolfram Mathematica. В нем такие вычилсения делать можно, но нужно осовить язык программирования этого пакета. Короче, варинатов решения проблемы много.
Если говорить о Java, то поисковик на запрос BigMath for Java показал несколько готовых библиотек. Скачивайте, сравнивайте и пользуйтесь.
Кроме того, в программировании лучше сумировать ряды в обратном порядке. Находите член ряда, который достаточно мал и сумиируете от меньшего к большему. Благодаря такому приему малые челены ряда не тонут в ошибках округления, когда вы начинаете вычислять сумму с самого большого члена.
extrnМыслитель (7180)
7 лет назад
стоит добавить, что такое число как 1/3 в десятичной системе невозможно записать без потери качества, даже имея огромное количество знаков после запятой.
такие числа (покуда они рациональные) проще записывать именно в виде дроби, в том числе дроби, где числитель и знаменатель - вышеупомянутые большие числа.
многие языки поддерживают такой тип данных (обычно называется Rational) из коробки или с помощью отдельных математических библиотек.
Андванс Чесс
Просветленный
(31986)
7 лет назад
Для таких целей подойдёт любой, где определён и без "костылей" используется 40-битный тип дробных чисел. К примеру, в Delphi таким типом является Extended.
Когда быстродействия не требуется, а высокая точность очень важна, тогда целесообразно использовать математические пакеты: Maple, MathCAD, MATLAB, Mathematica и подобные.
Иногда при работе с числовыми рядами существует способ их упростить (например, разбить на несколько рядов, часть из которых является разложением каких-либо функций, а другая часть сходится быстрее исходного ряда), в таких случаях нужда в длительных высокоточных расчётах и вовсе отпадает, в этом также могут помочь вышеперечисленные пакеты.