gpt4 book ai didi

scheme - 为什么 (* 1.1 1.1) 在 Racket 中是 1.2100000000000002?

转载 作者:行者123 更新时间:2023-12-04 23:03:00 28 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Is floating point math broken?

(31 个回答)


7年前关闭。




当我在 Racket 中尝试以下操作时:

(* 1.1 1.1)

为什么它返回
1.2100000000000002

代替
1.21

尽管
(* 1.2 1.2) ; is 1.44, as expected

编辑

并且以下返回false:
(= (* 1.1 1.1) 1.21); #f

最佳答案

哦,看,这比较正确!

> (= (* #e1.1 #e1.1) #e1.21)
#t

(Racket 有一个非常好的特性,即 #e1.1 实际上读入为 1.1。其他 Scheme 实现不一定那样工作,实际上可能先将 #e1.1 读入为浮点数,然后再转换为精确值。)

无论如何,为了详细说明其他人的观点,在没有精确性说明符的情况下,Scheme 将带有点的数字文字视为不精确†(即 1.1#i1.1 读入为同一事物)。对于不精确的数字,在进行“精确”比较(例如 = )时,您不能真正期望得到合理的结果。

† R7RS,第 6.2.5 节:“如果数字的书面表示没有精确性前缀,则常量如果包含小数点或指数则是不精确的。否则,它是精确的。”

关于scheme - 为什么 (* 1.1 1.1) 在 Racket 中是 1.2100000000000002?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436204/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com