当我在球拍中尝试以下内容时:
(* 1.1 1.1)
Run Code Online (Sandbox Code Playgroud)
为什么会回来
1.2100000000000002
Run Code Online (Sandbox Code Playgroud)
代替
1.21
Run Code Online (Sandbox Code Playgroud)
而
(* 1.2 1.2) ; is 1.44, as expected
Run Code Online (Sandbox Code Playgroud)
并且以下返回false:
(= (* 1.1 1.1) 1.21); #f
Run Code Online (Sandbox Code Playgroud)
哦,看,这比较正确!
> (= (* #e1.1 #e1.1) #e1.21)
#t
Run Code Online (Sandbox Code Playgroud)
(Racket有一个非常好的功能,#e1.1
实际上读入的确是1.1.其他Scheme实现不一定以这种方式工作,实际上可能先读入#e1.1
浮点数然后转换为精确数据.)
无论如何,阐述其他人的角度来看,没有一个精确符,计划把一些文字与一个句点不精确†(即1.1
和#i1.1
为同样的事情读取).并且由于数字不准确,在进行"精确"比较(例如=
)时,您无法真正期待理智的结果.
† R7RS,第6.2.5节:"如果数字的书面表示没有精确性,那么如果常量包含小数点或指数,则常量是不精确的.否则,它就是精确的."
归档时间: |
|
查看次数: |
150 次 |
最近记录: |