2013-07-17 39 views

回答

8

你需要確定 「關閉」。如果你問一個小於一些寬容「差」,則可以使用<推出自己的功能:

(defn close? [tolerance x y] 
    (< (difference x y) tolerance)) 

凡差異可能是絕對的:

(defn absolute-difference ^double [^double x ^double y] 
    (Math/abs (double (- x y)))) 

或相對:

(defn relative-difference ^double [^double x ^double y] 
    (/ (Math/abs (- x y)) 
    (max (Math/abs x) (Math/abs y)))) 

(當然,選擇你的首選定義的相對差異)。

然後(partial close? 0.001)將測試近似相等與容差0.001。

要發現公差參數有用值的限制,您可以使用Math/ulp,這是一種靜態方法,它採用double並返回它與最小的較大double之間的絕對差值。

5

雖然我喜歡米哈爾Marczyk的溶液,請注意,已經有

在clojure.algo.generic.math函數定義的約=

功能。樣品用法:

clojuree.o=> (approx= 1.41 (sqrt 2) 1e-2) 
true 
clojuree.o=> (approx= 1.41 (sqrt 2) 1e-4) 
false 
相關問題