Я экспериментирую с формулой вычисления пи, и сделал это:
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()
}
вывод: