(system-include "carp_double.h") (defmodule Double (def pi 3.141592653589793) (def e 2.718281828459045) (register = (Fn [Double Double] Bool)) (register < (Fn [Double Double] Bool)) (register > (Fn [Double Double] Bool)) (register neg (Fn [Double] Double)) (register + (Fn [Double Double] Double)) (register - (Fn [Double Double] Double)) (register * (Fn [Double Double] Double)) (register / (Fn [Double Double] Double)) (register to-int (Fn [Double] Int)) (register from-int (Fn [Int] Double)) (register to-float (Fn [Double] Float)) (register from-float (Fn [Float] Double)) (register to-long (Fn [Double] Long)) (register from-long (Fn [Long] Double)) (register to-bytes (Fn [Double] Long)) (register sin (Fn [Double] Double)) (register cos (Fn [Double] Double)) (register tan (Fn [Double] Double)) (register acos (Fn [Double] Double)) (register asin (Fn [Double] Double)) (register atan (Fn [Double] Double)) (register atan2 (Fn [Double Double] Double)) (register cosh (Fn [Double] Double)) (register sinh (Fn [Double] Double)) (register tanh (Fn [Double] Double)) (register exp (Fn [Double] Double)) (register frexp (Fn [Double (Ref Int)] Double)) (register ldexp (Fn [Double Int] Double)) (register log (Fn [Double] Double)) (register log10 (Fn [Double] Double)) (register modf (Fn [Double (Ref Double)] Double)) (register pow (Fn [Double Double] Double)) (register sqrt (Fn [Double] Double)) (register floor (Fn [Double] Double)) (register ceil (Fn [Double] Double)) (register mod (Fn [Double Double] Double)) (register copy (Fn [(Ref Double)] Double)) (register abs (Fn [Double] Double)) (defn clamp [min, max, val] (if (> val max) max (if (< val min) min val))) (doc approx "checks whether x and y are approximately (i.e. margin of error of 0.00001) equal") (defn approx [x y] (if (> x y) (< (- x y) 0.00001) (< (- y x) 0.00001))) (defn /= [x y] (not (Double.= x y))) (defn zero [] 0.0) (defn add-ref [x y] (Double.+ @x @y)) ) (defmodule DoubleRef (defn = [a b] (Double.= @a @b)) (defn < [a b] (Double.< @a @b)) (defn > [a b] (Double.> @a @b)) )