ここでClojureの初心者。clojure 1.4.0 REPL を使用します。
(== 2 2.0) ; true
(== 2.0 2.0M) ; true
(== 2 2.0M) ; false
これは論理違反ではありませんか?最初の 2 つが真である場合、3 つ目も真である必要はありませんか?
ここでClojureの初心者。clojure 1.4.0 REPL を使用します。
(== 2 2.0) ; true
(== 2.0 2.0M) ; true
(== 2 2.0M) ; false
これは論理違反ではありませんか?最初の 2 つが真である場合、3 つ目も真である必要はありませんか?
==
はtype-independent
、これを試してください:
user=> (== (bigdec 2.0) 2.0M)
true
user=> (type (bigdec 2.0))
java.math.BigDecimal
user=> (type 2.0M)
java.math.BigDecimal
bigDecimals は、値とスケールの両方が同じ場合にのみ等しいと見なされます。
user> (== 2 (. 2.0M stripTrailingZeros))
true
user> (== 2 2.0M )
false
bigdecimals の間でさえ、もっとばかげた例が発生します。
user> (== 0.000000M 0.0M)
false
個人的には、これは数学的な意味で「間違っている」と考えており、このバグを開いて、これを変更することに関心があるかどうかを確認しました。