R6RS:翻訳:R6RS:11.7.1 Propagation of exactness and inexactness
11.7.1 正確性と不正確性の伝播
次に挙げる手続きは引き数がすべて正確であった場合、数学的に正しい正確な結果を返さなければならない。
- +
- -
- *
- max
- min
- abs
- numerator
- denominator
- gcd
- lcm
- floor
- ceiling
- truncate
- round
- rationalize
- real-part
- imag-part
- make-rectangular
次に挙げる手続きは引き数がすべて正確で、除数が 0 でない場合、正しく正確な答えを返さなければならない。
- /
- mod
- div-and-mod
- div0
- mod0
- div0-and-mod0
さらに、 expt 手続きは最初の引き数に正確な実数オブジェクトを与え、二番目の引き数に正確な整数オブジェクトを与えた場合、正しく正確な結果を返さなければならない。
一般則としては、総称的な演算は引き数がすべて正確で結果が数学的によく定義されている場合には正しく正確な結果を返し、引き数のいずれかが不正確であれば不正確な結果が返る。この規則の例外としては sqrt、 exp、 log、 sin、 cos、 tan、 asin、 acos、 atan、 expt、 make-polar、 magnitude、 angle がある。これらの手続きは、それぞれの手続きの仕様に示されているように、正確な引き数が与えられた場合でも、(必須ではないが)不正確な結果を返すことがある。
上の規則の一般的な例外のひとつは、すべての可能な不正確な引き数を正確な引き数に置き換えた場合において、正確な結果が正しい結果である場合、実装系は不正確な引き数を与えられても正確な結果を返すことがある。例としては (* 1.0 0) は 0 (正確)か 0.0 (不正確)のどちらかを返す。