Java - вычисление больших математических выражений - PullRequest
3 голосов
/ 23 декабря 2009

Я сталкиваюсь со сценарием, в котором плохо приходится вычислять некоторые огромные математические выражения. Сами по себе выражения просты, то есть имеют только обычные основы BODMAS, но числа, которые встречаются как операнды, очень велики, до мелодии из 1000 цифр. Я знаю о классе BigInteger модуля java.math, но я ищу другой способ, чтобы вычисления могли происходить также быстро. Я - парень, все еще находящий свои ноги в Java, поэтому любые советы или рекомендации в этом отношении были бы очень полезны.

С уважением P1nG

Ответы [ 5 ]

11 голосов
/ 23 декабря 2009

Попробуйте это с BigInteger, профилируйте результаты с некоторыми тестовыми вычислениями и посмотрите, сработает ли это для вас, прежде чем искать что-то более оптимизированное.

5 голосов
/ 23 декабря 2009

Поскольку вы говорите, что вы новичок в Java, я бы предложил вам использовать BigInteger и BigDecimal, если вы не хотите писать свои собственные обработчики произвольно большого числа. BigInteger и BigDecimal достаточно быстры для большинства их использования. Единственный раз, когда у меня возникали проблемы со скоростью, это когда речь идет о числах порядка миллиона цифр.

Это если у вас нет особой необходимости не использовать BigInteger.

1 голос
/ 23 декабря 2009

BigInteger / BigFloat будет наиболее оптимизированной реализацией обобщенной математики, которую вы, возможно, получите.

Если вы хотите это быстрее, вы МОЖЕТЕ иметь возможность писать ассемблер для использования шаблонов со сдвигом битов для специализированной математики (ну, например, деление на 2 обычно является простым сдвигом вправо), но если вы делаете больше нескольких различные типы уравнений, которые будут очень непрактичными.

BigInteger медленный по сравнению с int, но он, вероятно, будет лучшим, что вы, возможно, получите для операций с числами более 64 бит или около того, не переходя на другой язык - и даже тогда вы, вероятно, выиграли » не может быть большого улучшения, если этот другой язык не является ассемблером ...

1 голос
/ 23 декабря 2009

Сначала напишите программу правильно (используя BigFoo), а затем определите, подходит ли оптимизация.

0 голосов
/ 23 декабря 2009

Я удивлен, что уравнения с 1000 цифрами имеют практическое применение (кроме, возможно, шифрования) Не могли бы вы объяснить, что вы делаете и каковы ваши требования к скорости?

...