Логарифм большого десятичного числа - PullRequest
41 голосов
/ 11 апреля 2009

Как рассчитать логарифм BigDecimal? Кто-нибудь знает какие-либо алгоритмы, которые я могу использовать?

Мое гугл до сих пор пришло к (бесполезной) идее простого преобразования в double и использования Math.log.

Я предоставлю точность требуемого ответа.

edit: подойдет любая база. Если будет проще в базе x, я сделаю это.

Ответы [ 11 ]

0 голосов
/ 13 января 2019

Я создал функцию для BigInteger, но ее можно легко изменить для BigDecimal. Разобрать журнал и использовать некоторые его свойства - вот что я делаю, но получаю только двойную точность. Но это работает для любой базы. :)

public double BigIntLog(BigInteger bi, double base) {
    // Convert the BigInteger to BigDecimal
    BigDecimal bd = new BigDecimal(bi);
    // Calculate the exponent 10^exp
    BigDecimal diviser = new BigDecimal(10);
    diviser = diviser.pow(bi.toString().length()-1);
    // Convert the BigDecimal from Integer to a decimal value
    bd = bd.divide(diviser);
    // Convert the BigDecimal to double
    double bd_dbl = bd.doubleValue();
    // return the log value
    return (Math.log10(bd_dbl)+bi.toString().length()-1)/Math.log10(base);
}
...