・割り算の余り S.H氏
5を3で割った余りが2であることは万人が認める事実だろう。また、−5を3で割った余
りが1であることも、数学に親しんだ方だったら少し考えれば納得されるだろう。
それでは、3.14を0.3で割った余りはどうなるのだろう。小数で割った余りを求めるこ
とは現実的ではないかもしれないが、不思議な感覚に襲われること必定である。
3.14÷0.3 の商を小数第一位まで求めるときの余りはいくつか?
この問題は、通常筆算で次のように計算される。
問題は、左記の筆算の結果を見て、余りを何と答えるかである。
余りを「0.2」と答えた方はいないだろうか?正解は、「0.02」である。
割るときに小数点を移動させているので余りを「0.2」と答えがちだが、
正しくは、もとの小数点の位置で答えなければならないということだ。
そもそも、N÷a の余り
r とは、 N=a・Q+r ( 0≦r<a )を満たす数である。問題では
3.14=0.3・Q+r ( 0≦r<0.3 )を満たす数 r
を求めればいいわけだが、上記の筆
算では、両辺を10倍して、 31.4=3・Q+10・r から、 10・r=0.2
よって、 r=0.02 となる。
(追記) 令和3年2月11日付け
読者の方のために、小数同士の割り算の練習問題を置いておこう。
問題 3÷2.3の商(小数第2位まで)と余りを求めよ。(小学校5年生レベル)
(解) 筆算により、
なので、商は、1.30 余りは、0.010 となる。
(コメント) あまりの小数点は元の位置から下ろしてくるという点が覚えておくべき要点となる。
(追記) 平成22年12月14日付け
上記の話題について、攻略法さんからのコメントです。
Excel のワークシート関数では、「MOD(3.14,0.3)=0.14 です。」
C言語では、「fmod(3.14,0.3)=0.14 です。」
Excel のワークシート関数では、「MOD(−5,3)=1 です。」
Excel のVBAでは、「−5 MOD 3 は、−2 です。」
C言語では、「−5 % 3=−2 です。」
私「あれ〜ぇ?」
(考察) 基本関数を
SGN(x) x の符号 、ABS(x) x の絶対値 、INT(x) x を超えない最大の整数
とする。このとき、
Excel のワークシート関数では、 MOD(x ,y)=x−y*INT(x/y)
C言語では、 REMAINDER(x ,y)=x−y*IP(x/y)
ただし、IP(x)=SGN(x)*INT(ABS(x)) x の整数部分
で求めているようだ。
FNさんからのコメントです。(平成22年12月14日付け)
大昔パソコンがROMでBASICを持ってた時代、INTという関数の仕様はまちまちでした。
INT(−1.3)で「−1」を返すのと、「−2」を返すのがありました。
C言語は使わない(使えない)のでわかりませんが、Excel
VBAでは、MODは演算子で、
「−5 MOD 3」
は、「−2」を返します。C言語の%と同じ動作のようです。ワークシート関数
のMODとVBAの演算子としてのMODは違う仕様にしているようです。だから、C言語でも
1
を返すような関数があるかもしれません。
INT(−5/3)は、「−2」ですが、「−5 \
3」は「−1」です。「−1.3」の整数部分を「−2」と
する流儀にも、「−1」にする流儀にも対応しようということでしょう。数学的には「−2」の方が
いいと思いますが、日常言語の整数部分という表現からは、「−1」は間違いだと断言するこ
とはできないでしょう。
数学で、負の数に対して、整数部分とか小数部分という言葉を使うことはないと思います。
大学入試問題では正であることが明らかな具体的な数、例えば、「1+」に対して整数部
分とかを使うことはあっても、x>0が明らかでも、x
の整数部分とは書かないだろうと思いま
す。どうしても使いたければ、「x を越えない最大の整数を x
の整数部分という」と定義して
からでしょう。