Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Какой язык программирования лучше всего для сложных математических расчетов?

gekateng Мыслитель (6170), закрыт 7 лет назад
Пишу программу на Java и столкнулся с такой проблемой, как отбрасывание значений, т. е. при вычислении суммы ряда при больших значениях Java начинает отбрасывать значения. Особенно в циклах. Эти формулы никак нельзя изменить, поэтому нужен язык программирования с очень высокой точностью расчётов. Какой язык программирования в соотношении популярность/точность лучше всего выбрать?
Лучший ответ
Sagittarius Искусственный Интеллект (138387) 7 лет назад
Если проблема в накапливающихся ошибках вычисления, то можно использовать любой язык программирования в котором есть библиотека big_math. Название условное. В разных языках она может называться по своему. Однако, суть проста. Вместо real, float или extended вы используете класс в котором кранится массив цифр достаточной длины. Понятно, что работает это намного медленней, чем вычисления с использованием обычных вещественных типов (real, float или extended), однако таким образом вы может поднять точность там, где она действительно нужна.
Сначала поищите библиотеку на языке, которым вы хорошо владеете. Можно попробовать пакет Wolfram Mathematica. В нем такие вычилсения делать можно, но нужно осовить язык программирования этого пакета. Короче, варинатов решения проблемы много.

Если говорить о Java, то поисковик на запрос BigMath for Java показал несколько готовых библиотек. Скачивайте, сравнивайте и пользуйтесь.

Кроме того, в программировании лучше сумировать ряды в обратном порядке. Находите член ряда, который достаточно мал и сумиируете от меньшего к большему. Благодаря такому приему малые челены ряда не тонут в ошибках округления, когда вы начинаете вычислять сумму с самого большого члена.
extrnМыслитель (7180) 7 лет назад
стоит добавить, что такое число как 1/3 в десятичной системе невозможно записать без потери качества, даже имея огромное количество знаков после запятой.
такие числа (покуда они рациональные) проще записывать именно в виде дроби, в том числе дроби, где числитель и знаменатель - вышеупомянутые большие числа.

многие языки поддерживают такой тип данных (обычно называется Rational) из коробки или с помощью отдельных математических библиотек.
Sagittarius Искусственный Интеллект (138387) В принципе вы правы. Более того, есть отдельные алгоритмы для решение исключительно в Rational. Это хлопотное дело. При этом, вы не всегда знаете точность вычисления, а это важно, когда вы решаете задачу физическую или техническую.
extrnМыслитель (7180) 7 лет назад
без потери точности :) пардон
Остальные ответы
Александр Иванов Высший разум (207673) 7 лет назад
Что значит "начинает отбрасывать значения"? Не совсем понятно. Конкретный пример приведите
gekatengМыслитель (6170) 7 лет назад
При увеличении значений исходных данных увеличивается ошибка в расчетах. Формулы проверенные и в них ошибок нет.
Александр Иванов Высший разум (207673) Это все "ни о чем". Все равно непонятно. Язык программирования никак не влияет на точность вычислений. Или Вы все же не можете четко сформулировать проблему
Сергей ИвановПросветленный (49981) 7 лет назад
Что здесь не понятного? Типичный выход за пределы разрядности числа.
Андванс Чесс Просветленный (31986) 7 лет назад
Для таких целей подойдёт любой, где определён и без "костылей" используется 40-битный тип дробных чисел. К примеру, в Delphi таким типом является Extended.
Когда быстродействия не требуется, а высокая точность очень важна, тогда целесообразно использовать математические пакеты: Maple, MathCAD, MATLAB, Mathematica и подобные.
Иногда при работе с числовыми рядами существует способ их упростить (например, разбить на несколько рядов, часть из которых является разложением каких-либо функций, а другая часть сходится быстрее исходного ряда), в таких случаях нужда в длительных высокоточных расчётах и вовсе отпадает, в этом также могут помочь вышеперечисленные пакеты.
Сергей Иванов Просветленный (49981) 7 лет назад
Для математики, вроде как, Fortran хорошо подходит.
На счет недостаточной разрядности числа, обычно это решается подключением сторонней библиотеки для работы с большими числами.
Похожие вопросы