Как перезаписать перегруженную переменную - PullRequest
0 голосов
/ 22 декабря 2018

Я экспериментирую с формулой вычисления пи, и сделал это:

package main

import (
    "fmt"
    "math"
)

func bbpformula() {

    var result float64

    for k := 0.0; k <= 100; k++ {

            result += (1 / math.Pow(16.0, k) * ((4 / (8*k + 1)) - (2 / (8*k + 4)) - (1 / (8*k + 5)) - (1 / (8*k + 6))))

    }

    fmt.Println(result)

}

func main() {

    bbpformula()

}

и получу:

3.141592653589793

Однако я бы хотелбольше цифр, я попытался использовать пакет math / big, чтобы сделать переменные big.Float с более простыми формулами, но арифметические операции были очень запутанными и медленными.

Так что моя идея перезаписать переменную результата, когда она перегружена (максимальная вместимость), но я понятия не имею, как это сделать!

Может кто-нибудь объяснить мне, как это делается?

edit: попытался использовать результат if> math.MaxFloat64, новывод превращается в ничто

import (
    "fmt"
    "math"
)

func bbpformula() {

    var result float64
    var resultb float64

    for k := 0.0; k <= 100; k++ {

            result += (1 / math.Pow(16.0, k) * ((4 / (8*k + 1)) - (2 / (8*k + 4)) - (1 / (8*k + 5)) - (1 / (8*k + 6))))
            if result > math.MaxFloat64 {
                    fmt.Println(result)
                    resultb += (1 / math.Pow(16.0, k) * ((4 / (8*k + 1)) - (2 / (8*k + 4)) - (1 / (8*k + 5)) - (1 / (8*k + 6))))
                    if resultb == math.MaxFloat64 {
                            fmt.Println(resultb)
                            result = 0
                    }

            }

    }

}

func main() {

    bbpformula()

}

вывод:

1 Ответ

0 голосов
/ 22 декабря 2018

Попробуйте использовать MaxFloat32 или MaxFloat64 в пакете math.Например, проверьте, если result > math.MaxFloat64?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...