我想定义一个具有以下属性的函数:
(almost-equal? (cos (/ pi 2)) 0.0) ; --> #t
为此,我认为我应该以下列方式使用flulp
:
(define (almost-equal? a b)
(let [[epsilon (max (abs (flulp (* 10.0 a))) (abs (flulp (* 10.0 b))))]]
(<= (absolute-error a b) epsilon)))
但它没能通过我的测试。我们是否有规范的方式进行这种比较?欢迎任何建议。
答案 0 :(得分:3)
使用relative-error
:documentation
我可以推荐这篇关于如何调试数值函数的文章:
Practically Accurate Floating-Point Math 作者:Neil Toronto和Jay McCarthy