- (= significand 1.0-significand))
- (scale-float (typecase float
- (short-float short-float-negative-epsilon)
- (single-float single-float-negative-epsilon)
- (double-float double-float-negative-epsilon)
- (long-float long-float-negative-epsilon))
- (- exponent 1.0-exponent))
- (scale-float (typecase float
- (short-float short-float-epsilon)
- (single-float single-float-epsilon)
- (double-float double-float-epsilon)
- (long-float long-float-epsilon))
- (- exponent 1.0-exponent))))))
+ (= significand 1.0-significand))
+ (scale-float (typecase float
+ (short-float short-float-negative-epsilon)
+ (single-float single-float-negative-epsilon)
+ (double-float double-float-negative-epsilon)
+ (long-float long-float-negative-epsilon))
+ (- exponent 1.0-exponent))
+ (scale-float (typecase float
+ (short-float short-float-epsilon)
+ (single-float single-float-epsilon)
+ (double-float double-float-epsilon)
+ (long-float long-float-epsilon))
+ (- exponent 1.0-exponent))))))
+
+(defun sinc (x)
+ (if (zerop x)
+ 1d0
+ (let ((x (coerce x 'double-float)))
+ (/ (sin x) x))))
+
+
+(defun numbers-within-percentage (a b percent)
+ "Determines if two numbers are equal within a percentage difference."
+ (let ((abs-diff (* 0.01 percent 0.5 (+ (abs a) (abs b)))))
+ (< (abs (- a b)) abs-diff)))