为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 math.Nextafter(2,3) 在 Go 中增加

为什么 math.Nextafter(2,3) 在 Go 中增加

Go
繁华开满天机 2021-08-16 18:31:02
这是取自这里: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。TxT
1.00000000000000000001float64


查看完整回答
反对 回复 2021-08-16
  • 1 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信