去浮零除法编译器错误

时间:2018-07-25 06:49:45

标签: go divide-by-zero

这种行为有何意义?仅仅打印一个编译器警告而不是错误不是很有意义吗?

func main() {
var y float64 = 0.0
var x float64 = 4.0 / y
fmt.Println(x)
}

+ Inf

func main() {
var x float64 = 4.0 / 0.0
fmt.Println(x)
}

prog.go:9:22:除以零

1 个答案:

答案 0 :(得分:3)

Golang数字const是特殊的。它们没有直接映射到任何IEEE754浮点类型,也不能存储无穷或例如-0。

来自the documentation

  

数字常数表示任意精度的精确值,并且不会溢出。因此,没有常量表示IEEE-754负零,无穷大和非数字值。

此选择带来了一些功能,因为它减少了常量的溢出:

var x float64 = 1e1000 / 1e999 // yes, this is 10

如果您需要无穷大值,可以这样做

var x float64 = math.Inf(1)