在我的clojure研究期间,我发现了这一点:
;Clojure 1.4.0
(def neg_inf -1E-400)
(cond
(= neg_inf 0) "Zero"
(< neg_inf 0) "Negative"
(> neg_inf 0) "Positive"
:default "Neither"
)
;#'user/neg_inf
;user=> "Neither"
它是一个错误吗?
然后,我尝试了:
(Math/signum -1E-400) ;-0.0
这是我发现的一种方法,可以发现某个数字何时被视为 -0.0 :
(Math/copySign 1. -0.) ;-1.0
(Math/copySign 1. -1E-99999999999999999999999);-1.0
这样,我可以知道一个数字是否为负,即使它非常接近于零。
所有这一切都是因为我试图解决这个问题:
(defn hexadecimal-to-degrees [rah ram ras]
{ :pre [ (>= rah 0) (< rah 24) (>= ram 0) (< ram 60) (>= ras 0) (< ras 60) ]
:post [ (>= % 0) ]
}
(/ (+ rah (/ ram 60) (/ ras 3600)) 15)
)
(hexadecimal-to-degrees -1E-400 -1E-400 -1E-400)
;-0.0 ; OMG, no Assert failed here!
由于赤经(地球经度的天体等价物)没有负值,我正在测试后置条件是否以保证无论我传递什么数字都不会为 RA 返回负值的方式传递给功能..