Аппроксимация журнала (10 ^ k) - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь найти результат журнала (10 ^ k), где k - большое число, например 10000. Например:

BigDecimal first = BigDecimal.TEN.pow(10000);
double result = Math.log(first.doubleValue());

Однако «результат» становится бесконечным, однако на вольфраме он приближается на 23025.85.Любые предложения как найти результат? В итоге мне достаточно числа с двумя первыми цифрами после запятой.

Ответы [ 3 ]

9 голосов
/ 16 июня 2020

Используйте тот факт, что

log(10^k) = k*log(10)

Итак:

System.out.println(10000 * Math.log(10));

Выводит:

23025.850929940458
0 голосов
/ 16 июня 2020

Видите, есть простое свойство логарифмов, которое вы можете использовать:

log(x^y) = y*log(x)

Итак, что вы можете сделать:

double y = y*log(x); 
System.out.println(Math.round(y));

Надеюсь, это поможет!

0 голосов
/ 16 июня 2020
• 1000 который превышает максимальное значение для BigDecimal, что должно привести к ошибке или "бесконечности", поскольку оно выходит за пределы возможностей типа данных, я бы предложил выполнить операцию в обратном порядке, возможно, сначала обработайте журнал на Например, значение базы 1, и только затем умножьте его на любое число, которое вы хотите использовать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...