當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。