9999999999999999.0 - 99999999999

2024-01-14  本文已影响0人  道行者

看了网上的这篇文章 9999999999999999.0 - 9999999999999998.0,大多数编程语言算出来的都是 2,包括 GoLang。我用 go 亲自写代码试了一下,结果如下:

  var a = 9999999999999999.0
  var b = 9999999999999998.0
  const e = 9999999999999999.0
  const f = 9999999999999998.0

  fmt.Printf("%v\n", 9999999999999999.0-9999999999999998.0)                   // 输出 1
  fmt.Printf("%v\n", 9999999999999999.1-9999999999999998.1)                   // 输出 1 ?
  fmt.Printf("%v\n", e-f)                                                     // 输出 1
  fmt.Printf("%v\n", float32(9999999999999999.0)-float32(9999999999999998.0)) // 输出 0
  fmt.Printf("%v\n", float64(9999999999999999.1)-float64(9999999999999998.1)) // 输出 2
  fmt.Printf("%v\n", float64(9999999999999999.0)-float64(9999999999999998.0)) // 输出 2
  fmt.Printf("%v\n", a-b)                                                     // 输出 2

go 的版本是 version go1.21.4 windows/amd64。
不明白的是,第二条输出语句,它是按什么数据类型计算的呢?肯定不能是整数。是 float32 还是 float64?
只能说用常量进行计算的精度比用变量高。

上一篇 下一篇

猜你喜欢

热点阅读