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 に負の値を返さないことを保証する方法で事後条件が機能するかどうかをテストしていました。関数..