このコードは 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*