为什么Clojure/REPL将相同数字的浮点和整数表示形式视为不同的?

为什么Clojure/REPL将相同数字的浮点和整数表示形式视为不同的?,clojure,Clojure,在Clojure中,我编写了一个简单的函数,一直在调试,最终实现了这一点 (= 3 3) 正确吗 但是 isfalse 为什么? 我知道浮点运算存在一些问题,人们不应该直接比较两个浮点值 即使在Java中,3.0和3也将是相等的,可能还有很多其他语言。如果类型相同,它们就不一样了 注意java的equal是如何重新运行false的: > (.equals 3.0 3) false 或考虑以下java程序: public static void main(String []args){

在Clojure中,我编写了一个简单的函数,一直在调试,最终实现了这一点

(= 3 3)
正确吗

但是

is
false

为什么?

我知道浮点运算存在一些问题,人们不应该直接比较两个浮点值


即使在Java中,3.0和3也将是相等的,可能还有很多其他语言。

如果类型相同,它们就不一样了

注意java的
equal
是如何重新运行false的:

> (.equals 3.0 3)
false

或考虑以下java程序:

 public static void main(String []args){
   Integer i = 1000;
   System.out.println(i.equals(1000.0));
   System.out.println(i==1000.0);
 }
输出:


真的


和函数之间有区别

=

平等。如果x等于y,则返回true,否则返回false。等同于 javax.equals(y)

因此,如果要比较NUM的值,请使用
=

==

如果NUM都具有等效值,则返回非nil 值(与类型无关),否则为false


仅供参考,谢谢。你能把它作为一个答案吗?Stackoverflow etiquete禁止链接作为答案(例如,它们往往会过期)。如果有人能写下那篇演讲的摘录作为答案,那将是非常棒的。那个“某人”原来是多米尼克·凯塞尔:)
 public static void main(String []args){
   Integer i = 1000;
   System.out.println(i.equals(1000.0));
   System.out.println(i==1000.0);
 }