猿问

高朗计算全精度浮点数


使用小数点200作为精度,我需要计算一个从atto到十进制数的数字类似的截图。

PIPIONE
浏览 102回答 3
3回答

九州编程

要以纳米和阿托的精度获得值,您可以使用 和 在 fmt 中。Printf() 分别,我创建了一个小程序来获取您的价值如下:%.9f%.18f0.000000000000099707package mainimport (    "fmt"    "math")func main() {    powr := math.Pow(10, -18)    numb := 99707 * powr    fmt.Println("number", numb)    fmt.Printf("\nthe value in atto %.18f\n", numb)}输出:number 9.970700000000001e-14the value in atto 0.000000000000099707

墨色风雨

您也可以将包用于此目的。此库可以表示最多 2^31 (2147483648) 位数字。下面是一个简单的代码来执行计算:github.com/shopspring/decimald := decimal.NewFromInt(99707)d10 := decimal.NewFromInt(10)dpow := decimal.NewFromInt(-18)d10pow := d10.Pow(dpow)dmul := d.Mul(d10pow)fmt.Println(dmul)这可以简化为:d := decimal.NewFromInt(99707).Mul(decimal.NewFromInt(10).Pow(decimal.NewFromInt(-18)))fmt.Println(d)输出:0.000000000000099707查看游乐场

大话西游666

我对如何做到这一点很感兴趣,所以我从蟑螂那里找到了处理任意精确计算的apd包。您可以像这样使用它:import (    "fmt"    "github.com/cockroachdb/apd")func main() {    // 99707 * 10^(-18)    n1 := apd.New(99707, 0)    n2 := apd.New(10, 0)    n3 := apd.New(-18, 0)    c := apd.BaseContext.WithPrecision(200)    res := apd.New(0,0)    ctx, err := c.Pow(res, n2, n3)    if err != nil {        panic(err)    }    ctx, err = c.Mul(res, res, n1)    if err != nil {        panic(err)    }        fmt.Println(ctx.Inexact(), res.Text('f'))}它将输出:false 0.000000000000099707您必须小心可能发生的精度损失,并查看不精确的字段。
随时随地看视频慕课网APP

相关分类

Go
我要回答