这是取自这里:http : //tour.golang.org/#5package mainimport ( "fmt" "math")func main() { fmt.Printf("Now you have %g problems.", math.Nextafter(2, 3))}结果://Now you have 2.0000000000000004 problems.//Program exited.
1 回答
白板的微信
TA贡献1883条经验 获得超3个赞
您将获得与 java/scala 完全相同的结果。
该math/#Nextafter
函数“返回 x 之后朝向 y 的下一个可表示值。”
Float64frombits(Float64bits(x) + 1)
正如在这个线程中提到的
float64不能表示所有 16 位数字。
例如,如果 x = 0.12345678901234567,使用math.Nextafter
,可以看到附近的 float64 值为 ...1234565、...1234566 和 ...1234568
另请参阅“为什么十进制数不能用二进制精确表示? ”。
或者这个线程:
某些可以完全以 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
- 1 回答
- 0 关注
- 219 浏览
添加回答
举报
0/150
提交
取消