2008/06/25

[scheme]正確には、modulo != remainder

前回、Bugle Diary: [scheme]modulo=remainderで、moduloとremainderは同じ挙動をするという記事を書いたのですが、その後、コメントを頂きまして、実は、違うということを教えていただきました。
(コメントありがとうございます(* ̄∇ ̄*))

コメントいただいたときに、リンクが紹介されていたので、そちらを参考に、再度、検証しました。

前回と同様に、下の場合は、同じ評価結果を表示します。

Photobucket

問題は、次です。

実は、下の場合は、違う結果を返します。

Photobucket

上の式は、

-5 = -1 * 4 -1

と評価されていて、下の式は、

-5 = -2 * 4 +3

と返しています。

確かに実行結果が違う!!

教えていただいたこちらのサイトでは、remainderは、引数の両方が正の場合、戻り値が正確になり、符号が違う場合、余りは第一引数と同じになるようです。

一方、moduloも引数が、両方正の場合、戻り値が正確になり、符合が違う場合、第二引数の符号と同じ符号を余りが返すようです。

プロシージャーで使う場合、評価の仕方が変わるので、注意したいですね。

0 コメント:

コメントを投稿