2

私は How to Design Programs を読んでいましたが、演習 2.1.1 では次のことを行います。

DrScheme に数値を 2 乗する操作があるかどうかを調べます。角度のサインを計算します。および 2 つの数の最大値を決定します。-- 秒。2.2、例 2.1.1

私のコードは次のとおりです。

(sin (/ 5 3))
(sqr 12)
(max (sin (/ 5 3)) (sqr 12))

そして、プログラムを実行したときの結果は次のとおりです。

#i0.9954079577517649
144
#i144.0

#i0.9954079577517649との最大値を取得する最後の式で混乱しています144144答えはor144.0の代わりにすべきではありません#i144.0か?

4

1 に答える 1

2

max入力のいずれか(またはその他の操作) が不正確な場合、Scheme は不正確な数値を返します。

標準文書 R5RS には、 と について議論する際のセクションで次のように書かれてい6.2.5 Numerical operationsます。minmax

注: いずれかの引数が不正確である場合、結果も不正確になります (不正確さが結果に影響を与えるほど大きくないことを手順が証明できない場合、これは異常な実装でのみ可能です)。

144現在、それよりもはるかに大きいケースが作成される可能性がありますが、それは後者の数値の不正確さのレベル0.9954079577517649に依存します. 不正確さが 10 億パーセントのオーダーである場合、それは:-)よりもはるかに大きい可能性があります。144

その標準のセクション6.2.2 Exactnessにもこれがあります:

スキーム番号は、正確または不正確です。数値が正確な定数として記述されている場合、または正確な演算のみを使用して正確な数値から導出された場合、その数値は正確です。

不正確な定数として記述された場合、不正確な成分を使用して導出された場合、または不正確な演算を使用して導出された場合、数値は不正確です。

したがって、不正確さは数の伝染性です。

正弦関数や他の多くの三角関数は本質的に不正確な演算であるため、0.99-ish の数値は不正確です。の結果は、max不正確な入力があるため不正確です。

于 2014-08-01T07:28:15.797 に答える