当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


GO Float用法及代码示例


GO语言"math/big"包中"Float"类型的用法及代码示例。

非零有限浮点数表示 multi-precision 浮点数

用法:

sign × mantissa × 2**exponent

其中 0.5 <= 尾数 < 1.0,并且 MinExp <= index <= MaxExp 浮点数也可以为零(+0,-0)或无限(+Inf,-Inf)。所有浮点数都是有序的,两个浮点数 x 和 y 的排序由 x.Cmp(y) 定义。

每个浮点值还具有精度、舍入模式和准确度。精度是可用于表示该值的最大尾数位数。舍入模式指定应如何舍入结果以适合尾数位,准确度说明相对于精确结果的舍入误差。

除非另有说明,所有为结果指定 *Float 变量的操作(包括 setter)(通常通过接收器,但 MantExp 除外),根据结果变量的精度和舍入模式对数值结果进行舍入。

如果提供的结果精度为 0(见下文),则在进行任何舍入之前将其设置为具有最大精度值的参数的精度,并且舍入模式保持不变。因此,作为结果参数提供的未初始化浮点数将其精度设置为由操作数确定的合理值,并且它们的模式是 RoundingMode (ToNearestEven) 的零值。

通过将所需精度设置为 24 或 53 并使用匹配舍入模式(通常为 ToNearestEven),对于对应于正常(即非非正常)float32 或 float64 的操作数,浮点运算产生与对应的 float32 或 float64 IEEE-754 算法相同的结果数字。对于与 IEEE-754 不同的值, index 下溢和上溢会导致 0 或无穷大,因为浮点 index 的范围要大得多。

Float 的零(未初始化)值可以使用,准确地表示数字 +0.0,精度为 0 和舍入模式 ToNearestEven

操作总是采用指针参数 (*Float) 而不是 Float 值,并且每个唯一的 Float 值都需要自己唯一的 *Float 指针。要"copy" 一个 Float 值,必须使用 Float.Set 方法将现有(或新分配的)Float 设置为新值;不支持浮点数的浅拷贝,可能会导致错误。

type Float struct {
    // contains filtered or unexported fields
}

示例(移位):

package main

import (
	"fmt"
	"math/big"
)

func main() {
	// Implement Float "shift" by modifying the (binary) exponents directly.
	for s := -5; s <= 5; s++ {
		x := big.NewFloat(0.5)
		x.SetMantExp(x, x.MantExp(nil)+s) // shift x by s
		fmt.Println(x)
	}
}

输出:

0.015625
0.03125
0.0625
0.125
0.25
0.5
1
2
4
8
16

相关用法


注:本文由纯净天空筛选整理自golang.google.cn大神的英文原创作品 Float。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。