这是从这里取的: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.
答案 0 :(得分:8)
你会得到very same result with java/scala
math/#Nextafter
函数"将x后面的下一个可表示值返回y。"
Float64frombits(Float64bits(x) + 1)
中所述
float64 cannot express all 16 digit numbers。
例如,如果x = 0.12345678901234567,使用math.Nextafter
,您可以看到附近的float64值为... 1234565,... 1234566和... 1234568
另见" Why can't decimal numbers be represented exactly in binary?"。
或者这个帖子:
在基数10中可准确表示的某些数字在基数2中并不完全可表示 例如,数字0.1(基数10)不能在基数2中准确表示 就像0.1(基数3)不能在基数10中精确表示为十进制值:它是0.33333(永远重复)。
const x1 = 1 - float64(1.00000000000000000001) // 0!
The spec says如果"
x
可以通过类型T
的值表示,则可以将常量值x
转换为T
类型。 "
值1.00000000000000000001
在float64
中无法表示;最接近的近似值是1.