Почему 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(Arrays.stream(arr).mapToDouble(BigDecimal::doubleValue).sum());

for (int i = 0; i < times; i++) { //2542ms
a = b.multiply(b, context);
arr = a;
}
System.out.println(Arrays.stream(arr).mapToDouble(BigDecimal::doubleValue).sum());
}
}


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему BigDecimal.multiply(BigDecimal, MathContext) медленнее, чем BigDecimal.multiply(BigDecimal)?
    Anonymous » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Почему BigDecimal.multiply(BigDecimal, MathContext) медленнее, чем BigDecimal.multiply(BigDecimal)?
    Anonymous » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Почему поведение Double.ToString не то же самое, что MathContext.Decimal64 при построении больших в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Округление BigDecimal: doubleValue() и setScale(2, BigDecimal.ROUND_HALF_UP) в ценовых значениях
    Anonymous » » в форуме JAVA
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Использование параллелизма в Java делает программу медленнее (в четыре раза медленнее!)
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

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