前回、Bugle Diary: [scheme]modulo=remainderで、moduloとremainderは同じ挙動をするという記事を書いたのですが、その後、コメントを頂きまして、実は、違うということを教えていただきました。
(コメントありがとうございます(* ̄∇ ̄*))
コメントいただいたときに、リンクが紹介されていたので、そちらを参考に、再度、検証しました。
前回と同様に、下の場合は、同じ評価結果を表示します。
問題は、次です。
実は、下の場合は、違う結果を返します。
上の式は、
-5 = -1 * 4 -1 |
と評価されていて、下の式は、
-5 = -2 * 4 +3 |
と返しています。
確かに実行結果が違う!!
教えていただいたこちらのサイトでは、remainderは、引数の両方が正の場合、戻り値が正確になり、符号が違う場合、余りは第一引数と同じになるようです。
一方、moduloも引数が、両方正の場合、戻り値が正確になり、符合が違う場合、第二引数の符号と同じ符号を余りが返すようです。
プロシージャーで使う場合、評価の仕方が変わるので、注意したいですね。
0 コメント:
コメントを投稿