0

このコードは Sussman and Wisdom のStructure and Interpretation of Classical Mechanicsから取得したもので、その目的は、ホスト マシンがサポートする最小の正の浮動小数点を (それに近い) 導出することです。 https://github.com/hnarayanan/sicm/blob/e37f011db68f8efc51ae309cd61bf497b90970da/scmutils/src/kernel/numeric.scm

DrRacket で実行すると、私のマシンでは 2.220446049250313e-016 になります。

私の質問、これが値を返す原因は何ですか? このコードは末尾再帰的であり、ある時点でコンピューターが 2 で割ることができなくなるのは理にかなっています。なぜスローしないのでしょうか?

(define *machine-epsilon*
  (let loop ((e 1.0))
     (if (= 1.0 (+ e 1.0))
         (* 2 e)
         (loop (/ e 2)))))
*machine-epsilon*
4

4 に答える 4