Почему BigDecimal.multiply(BigDecimal, MathContext) медленнее, чем BigDecimal.multiply(BigDecimal)?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему BigDecimal.multiply(BigDecimal, MathContext) медленнее, чем BigDecimal.multiply(BigDecimal)?

Сообщение Anonymous »

Я пытаюсь выполнить рекурсивную операцию, используя произвольный десятичный масштаб.
Однако по мере повторения рекурсии требуемая точность также удваивается, поэтому ее необходимо обрезать определенного уровня.
Я нашел подходящий метод BigDecimal.multiply(BigDecimal, MathContext), но он оказался странно медленным, чем BigDecimal.multiply(BigDecimal) code>.
После проверки внутреннего кода я обнаружил, что BigDecimal.divideAndRound() является основной причиной низкой производительности. Это занимает так много времени?
Ниже приведен простой код, позволяющий оценить производительность.
public static void main(String[] args) {
BigDecimal b = new BigDecimal("0.4320843204893290423");
b = b.pow(20);
int times = 1000000;

MathContext context = new MathContext(100, RoundingMode.FLOOR);
BigDecimal[] arr = new BigDecimal[times];
BigDecimal a;
for (int i = 0; i < times; i++) { //59ms
a = b.multiply(b);
arr = a;
}
System.out.println(arr[0]);

for (int i = 0; i < times; i++) { //2542ms
a = b.multiply(b, context);
arr = a;
}
System.out.println(arr[0]);
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... imal-multi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»