Я пишу приложения для торговли валютой, чтобы жить, поэтому мне приходится работать с денежными значениями (обидно, что у Java все еще нет десятичного типа с плавающей запятой и нет ничего, чтобы поддерживать денежные вычисления произвольной точности). "Используйте BigDecimal!" - Вы могли бы сказать. Я делаю. Но теперь у меня есть некоторый код, где производительность является проблемой, а BigDecimal более чем в 1000 раз (!) Медленнее, чем double
примитивы.
Расчеты очень просты: система вычисляет a = (1/b) * c
много раз (где a
, b
и c
- значения с фиксированной точкой). Проблема, однако, заключается в этом (1/b)
. Я не могу использовать арифметику с фиксированной точкой, потому что нет фиксированной точки. И BigDecimal result = a.multiply(BigDecimal.ONE.divide(b).multiply(c)
не только уродлив, но и вяло медленен.
Что я могу использовать для замены BigDecimal? Мне нужно как минимум 10-кратное увеличение производительности. В остальном я нашел превосходную библиотеку JScience , которая имеет арифметику произвольной точности, но она даже медленнее, чем BigDecimal.
Есть предложения?