这是从这里获取的:http : //tour.golang.org/#5
package main import ( "fmt" "math" ) func main() { fmt.Printf("Now you have %g problems.", math.Nextafter(2, 3)) }
结果:
//Now you have 2.0000000000000004 problems. //Program exited.
使用java /scala将会得到完全相同的结果,该math/#Nextafter函数“返回朝Y X后的下一个表示值。”
math/#Nextafter
Float64frombits(Float64bits(x) + 1)
如本主题所述
float64 不能表示所有16位数字。 例如,如果x = 0.12345678901234567,使用math.Nextafter,您可以看到附近的float64值为… 1234565,… 1234566和… 1234568
math.Nextafter
或者这个线程:
一些在基数10中可以精确表示的数字在基数2中不能完全表示。 例如,数字0.1(基数10)不能在基数2中精确表示。 就像0.1(基数3)一样,也不能精确表示。以10为底的十进制值:它是0.33333(永久重复)。
该golang问题4398说明:
const x1 = 1 - float64(1.00000000000000000001) // 0!
规范说,如果“ 可由type的值表示”,则x可以将常量值转换为type 。 该值不能用表示;最接近的近似值为1。T``x``T 1.00000000000000000001``float64
x
T``x``T
1.00000000000000000001``float64