Go中float64和complex128类型的最大值

问题描述 投票:0回答:2

我需要知道golang中

float64
complex128
变量类型的最大值。 go 似乎没有
float.h
的等价物,我不知道如何计算它。

variables go floating-point
2个回答
37
投票

例如,

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 位宽,并使用 二进制补码算术。

还有一组预先声明的数字类型 特定于实现的尺寸:

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

为了避免可移植性问题,所有数字类型都是不同的,除了 byte,它是 uint8 的别名,rune,它是 uint8 的别名 int32。不同数值类型混合时需要进行转换 在表达式或赋值中。例如,int32 和 int 不是 相同的类型,即使它们在特定的尺寸上可能具有相同的尺寸 建筑。


4
投票

您还可以考虑使用 math 包中的

Inf
方法,该方法 返回无穷大的值(如果需要,可以为正值或负值),但被认为是
float64

不太确定

math.MaxFloat64
math.Inf()
之间是否存在争论。比较两者,我发现 Go 将无穷大值解释为大于最大浮点值。

package main

import (
    "fmt"
    "math"
)

func main() {
    infPos := math.Inf(1) // gives positive infinity
    fmt.Printf("%[1]T %[1]v\n", infPos)
    
    infNeg := math.Inf(-1) // gives negative infinity
    fmt.Printf("%[1]T %[1]v\n", infNeg)
}

© www.soinside.com 2019 - 2024. All rights reserved.