或者,为什么(= 1e16 (- 1e16 1))
返回true?我怎样才能得到更准确的答案?
最佳答案
1e16
在Scheme术语中是一个不精确的数字(或者在更实际的术语中是一个浮点数)对于253(9007199254740992)以上的(双精度)浮点数,ulp大于1,这意味着1的变化太小,无法表示
另一方面,100000000000000是一个整数如果你这样做,你确实会得到999999999999999在Scheme中,您还可以编写(- 10000000000000000 1)
来表示相同的数量;#e1e16
前缀使数字精确(在Scheme术语中;在实际术语中,它表示整数或有理数)。
}尝试评估#e
和(+ 9007199254740992.0 1)
,然后尝试评估(- 9007199254740992.0 1)
和(+ 9007199254740992 1)
与整数进行对比。
关于floating-point - Lisp:为什么(-1e16 1)产生10000000000000000而不是9999999999999999?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28917612/