Как получить натуральный логарифм большого целого числа - PullRequest
1 голос
/ 06 ноября 2019

Я пытаюсь преобразовать строку в целое число, а затем вычислить ее журнал. Мой первый подход состоял в том, чтобы преобразовать строку с использованием библиотеки strconv, но я получил ошибку о длине строки для преобразования.

После этого я использовал библиотеку math/big, которая работала нормально. Теперь я не могу применить math.Log() к приведенному большому целому числу.

Код:

package main

import (
    "fmt"
    "math"
    "math/big"
)

func main() {
    bb := "11948904162160164791281681976941230184120142151411311314211115130161285142991119211447"
    bi := big.NewInt(0)
    if _, ok := bi.SetString(bb, 10); ok {
        fmt.Println(math.Log(bi))
    } else {
        fmt.Printf("error parsing line %#v\n", bb)
    }

}

Ошибка:

cannot use bi (type *big.Int) as type float64 in argument to math.Log

1 Ответ

1 голос
/ 06 ноября 2019

Очень мало ситуаций, в которых вам нужна точность, превышающая точность, обеспечиваемую стандартным типом float64.

Но просто чтобы удовлетворить любые "безумные идеи полуночи" (или даже какое-то очень глубокое научное исследование!), С которыми кто-либо может столкнуться, реализации Роба Пайка некоторых операций с большими числами , вероятно,лучшее, что вы можете получить прямо сейчас с Go. Функцию log можно найти здесь .

...