web-dev-qa-db-ja.com

Goのfloat64およびcomplex128型の最大値

golangのfloat64およびcomplex128変数型の最大値を知る必要があります。 goにはfloat.hに相当するものがないようで、計算方法がわかりません。

7
mohsentux

例えば、

package main

import (
    "fmt"
    "math"
)

func main() {
    const f = math.MaxFloat64
    fmt.Printf("%[1]T %[1]v\n", f)
    const c = complex(math.MaxFloat64, math.MaxFloat64)
    fmt.Printf("%[1]T %[1]v\n", c)
}

出力:

float64 1.7976931348623157e+308
complex128 (1.7976931348623157e+308+1.7976931348623157e+308i)

パッケージの計算

import "math" 

浮動小数点制限値。 Maxは、型で表現できる最大の有限値です。 SmallestNonzeroは、型で表現できる最小の正のゼロ以外の値です。

const (
        MaxFloat32             = 3.40282346638528859811704183484516925440e+38  // 2**127 * (2**24 - 1) / 2**23
        SmallestNonzeroFloat32 = 1.401298464324817070923729583289916131280e-45 // 1 / 2**(127 - 1 + 23)

        MaxFloat64             = 1.797693134862315708145274237317043567981e+308 // 2**1023 * (2**53 - 1) / 2**52
        SmallestNonzeroFloat64 = 4.940656458412465441765687928682213723651e-324 // 1 / 2**(1023 - 1 + 52)
)

Goプログラミング言語仕様

数値タイプ

数値型は、整数値または浮動小数点値のセットを表します。事前宣言されたアーキテクチャに依存しない数値型は次のとおりです。

uint8       the set of all unsigned  8-bit integers (0 to 255)
uint16      the set of all unsigned 16-bit integers (0 to 65535)
uint32      the set of all unsigned 32-bit integers (0 to 4294967295)
uint64      the set of all unsigned 64-bit integers (0 to 18446744073709551615)

int8        the set of all signed  8-bit integers (-128 to 127)
int16       the set of all signed 16-bit integers (-32768 to 32767)
int32       the set of all signed 32-bit integers (-2147483648 to 2147483647)
int64       the set of all signed 64-bit integers (-9223372036854775808 to 9223372036854775807)

float32     the set of all IEEE-754 32-bit floating-point numbers
float64     the set of all IEEE-754 64-bit floating-point numbers

complex64   the set of all complex numbers with float32 real and imaginary parts
complex128  the set of all complex numbers with float64 real and imaginary parts

byte        alias for uint8
rune        alias for int32

Nビット整数の値はnビット幅であり、2の補数演算を使用して表されます。

実装固有のサイズを持つ事前宣言された数値型のセットもあります。

uint     either 32 or 64 bits
int      same size as uint
uintptr  an unsigned integer large enough to store the uninterpreted bits of a pointer value

移植性の問題を回避するため、uint8のエイリアスであるbyteとint32のエイリアスであるruneを除いて、すべての数値型は異なります。式または割り当てに異なる数値型が混在している場合は、変換が必要です。たとえば、int32とintは、特定のアーキテクチャで同じサイズである場合でも、同じ型ではありません。

10
peterSO