メインコンテンツへスキップ
CalcMax

余りの計算

範囲:-1,000,000,000〜1,000,000,000

範囲:-1,000,000,000〜1,000,000,000

計算結果

9

商

余り
2
検算
5 * 9 + 2 = 47

余り(剰余ともいいます)とは、除数が入る回数のうちいちばん大きい整数倍を取り去ったあとに残る分のことで、商はそれが何回だったかです。47と5なら答えは1通りです。5は47に9回入り、それが45で、2が残ります。だから商は9、余りは2です。両者は手順ではなく定義で結ばれています。被除数は除数かける商たす余りに等しい、という関係で、その検算が並べて印字されます。商と余りは組として初めて正しいからです。話が1通りでなくなるのは、被除数か除数が負のときで、それがこのページの主題そのものです。広く使われている2つの約束があり、同じ入力に違う答えを返します。切り捨ては厳密な商の小数部分を捨てるので商が0のほうへ動き、余りは被除数の符号を引き継ぎます。−47 ÷ 5は切り捨てで−9、余りは−2です。ユークリッドは代わりに商を次の整数まで下げるので、余りが負になりません。−47 ÷ 5はユークリッドで−10、余りは3です。どちらも定義を満たします。5 × −9 + −2も5 × −10 + 3も−47になるからです。つまり定義だけでは、ある道具がどちらを指しているかを決められません。だからここでは約束が隠れた選択ではなく入力になっています。切り捨てが既定なのは、ほとんどのプログラミング言語がそうで、ほとんどの人が整数除算といえばそれを指すからです。ユークリッドが要るのは剰余演算の側で、負の余りはその場面では使いものにならないからです。残りの特別な場合は定義からそのまま出てきます。被除数が0なら商も余りも0です。除数が被除数より大きいとき、正の被除数なら商は0で余りは被除数に等しくなります。そして割り切れるときは、どちらの約束でも余りは0です。

−47と5の4通りの符号の組み合わせを、両方の約束で

被除数除数切り捨てユークリッド
-475-9 r -2-10 r 3
-47-59 r -210 r 3
47-5-9 r 2-9 r 2
4759 r 29 r 2

このページ全体が4行に収まっています。最後の2行から読んでください。2つの数がどちらも正のとき、そして被除数が正で除数が負のときは、2つの列が同じ答えを持ちます。47 ÷ 5はどちらでも9余り2で、47 ÷ −5はどちらでも−9余り2です。2つの約束が別れるのは被除数が負になってからです。1行目がこのページの主題そのもので、−47 ÷ 5は切り捨てでは−9余り−2、ユークリッドでは−10余り3で、同じ数の2つの正しい分解です。2行目は、除数の符号を反転させると商が変わり、余りの約束は同じように振る舞うことを示します。つまり規則は単純に「被除数が負なら余りも負」ではありません。どの項目も被除数は除数かける商たす余りに等しくなっており、どれでも確かめられます。だから定義だけでは2つの列のどちらかを選べないのです。この表は入力に追随しません。上の結果欄が、選んだ約束をあなたの数に当てはめます。

公式

47 = 5 × 9 + 2 ⇒ 商9・余り2、−47 = 5 × −10 + 3(ユークリッド)に対して −47 = 5 × −9 + −2(切り捨て)

47
被除数、つまり割られる数で、−1,000,000,000から1,000,000,000までの整数です。負の値も認められ、それが下の約束の欄が存在する理由です。小数は丸めずに拒否します。余りは整数を整数で割ることについての主張だからです
5
除数で、−1,000,000,000から1,000,000,000までの整数です。0にはできません。検算を満たす商が存在しないからです。負でもよく、負の除数はどちらの約束でも商の符号を反転させます。それを正しく保つのが検算の行です
切り捨て
厳密な商の小数部分を捨てて0のほうへ動かす約束です。−47 ÷ 5は−9.4を切り捨てて−9になります。すると余りは被除数の符号を引き継ぎ、負になり得ます。ほとんどのプログラミング言語がこの答えを出し、ここでもこれが既定です
ユークリッド
代わりに商を次の整数まで下げる約束で、余りが決して負になりません。−47 ÷ 5は−10で余りは3になります。数論と剰余演算はこちらを必要とします。周期の中の位置を表す余りが負では意味をなさないからです。2つの数がどちらも正のときは一致します
商9
除数がまるごと何回入るかです。切り捨てでは厳密な商から小数部分を落としたもので、ユークリッドでは厳密な商を下へ丸めたものです。符号のせいで余りが負になるときにちょうど1だけ違い、それ以外では決して違いません
余り2
残った分で、このページ全体が扱っている数です。絶対値はいつも除数より小さく、割り切れるときは0です。その符号が2つの約束の違いのすべてで、切り捨てでは被除数に従い、ユークリッドでは0より下に行きません

ものを組に分けるのが日常的な場面で、約束が問題にならないのはそこです。47個を5個ずつの組にすると9組できて2個余り、誰もこれを−9組で−2個余りとは呼びません。約束が効き始めるのは数が負になり得る瞬間で、それは見た目よりずっとよくあります。プログラミングの整数除算がその代表で、ほとんどの言語は切り捨てるので−47 / 5は−9で余りは−2になり、余りが負にならない前提のコードは負の入力で壊れます。もう一方が剰余演算です。時計の時刻、暦の日付、一覧を巡回すること、固定幅整数の計算はどれもユークリッドを必要とします。ここから3つ戻るは周期の中の実在する位置に着地しなければならないからです。学校の課程では切り捨てのほうの余りが筆算と並んで教えられ、負の数は除外されるか、余りが被除数と同じ符号になるという同じ規則で扱われます。検算の行はどの場面でも使う価値があります。2つの約束は1だけ違う商と、除数だけ違う余りを出し、どちらの組も定義を満たすからです。定義を満たさない組は、どちらの約束を意図していようとバグです。

計算例

  1. 47 ÷ 5:2つの約束が一致する場合

    1. 5は47に9回入ります。5 × 9 = 45です
    2. 47 − 45 = 2なので、2が残ります
    3. 厳密な商は9.4で、切り捨てると9になります
    4. 9.4を下へ丸めても9なので、ここでは2つの約束が一致します
    5. 検算:5 × 9 + 2 = 47

    既定の入力であり、約束の欄が何の違いも生まない場合です。被除数と除数の符号が同じときはどちらの約束も一致し、正の数どうしの組はすべてそこに含まれます。違いが現れるのはどちらか一方が負になってからです。検算を文として読むのが身につける価値のある習慣です。除数かける商たす余りは、被除数を正確に返さなければなりません。

  2. −47 ÷ 5を切り捨てる:余りが負になる

    1. 厳密な商は−47 ÷ 5 = −9.4です
    2. 切り捨ては小数部分を捨てて商を0のほうへ動かします。−9です
    3. 5 × −9 = −45で、これは−47より2だけ大きいので、2を取り戻す必要があります。余りは−2です
    4. 余りが被除数の符号を引き継ぎ、それがここで負にしている理由です
    5. 検算:5 × −9 + −2 = −47

    商は−10ではなく−9で、余りは3ではなく−2です。この組と次の組はどちらも同じ定義を満たし、それがこのページの要点です。−9で余り−2と、−10で余り3は、どちらも−47の正しい分解であり、どちらになるかを決めるのが約束です。ほとんどのプログラミング言語はここに着地するので、余りが負にならないと決めつけたコードはこの行で驚くことになります。

  3. −47 ÷ 5をユークリッドで:余りが非負のまま

    1. 厳密な商はやはり−47 ÷ 5 = −9.4です
    2. ユークリッドは0のほうへではなく次の整数まで下げます。−10です
    3. 5 × −10 = −50で、これは−47より3だけ下なので、3が残ります。余りは3です
    4. 余りが非負になり、それがこの約束の保証です
    5. 検算:5 × −10 + 3 = −47

    同じ被除数、同じ除数で答えが違い、しかもこれは前の例の訂正ではありません。ユークリッドが要るのは剰余演算で、周期の中の位置を表す余りは負になれないからです。その場面では−47を5で割った余りは3で、剰余演算の結果はどれも0以上除数未満に収まることが期待されます。商は切り捨てより1だけ小さく、余りはちょうど除数だけ大きくなります。これが2つの約束の間の決まった関係です。

  4. 上限近くの負の除数:1,000,000,000 ÷ −999,999,999

    1. 除数が負なので厳密な商も負です。およそ−1.000000001です
    2. 0のほうへ切り捨てると−1になります
    3. −999,999,999 × −1 = 999,999,999で、1,000,000,000に1だけ足りません
    4. 余りは1で、被除数の符号を引き継ぎます。被除数は正なので正です
    5. 検算:−999,999,999 × −1 + 1 = 1,000,000,000

    どちらの数もこのページが受け付ける範囲の端にあり、商は−1になります。除数が絶対値で見て被除数よりほんのわずか大きいだけだからです。読む価値があるのは検算の行です。負の数2つが掛かって正の数になり、そこに余りの1が加わって、ちょうど被除数に着地します。負の除数はどちらの約束でも商の符号を反転させ、余りはやはり被除数に従います。

適用限界

被除数と除数はどちらも−1,000,000,000から1,000,000,000までの整数でなければならず、除数はどちらの約束でも0にはできません。0を掛けて0でない被除数を返す数は存在しないので、検算を満たす商と余りはあり得ません。小数は丸めずに拒否します。余りは整数が整数を割ることについての主張だからです。約束の欄は切り捨てとユークリッドの2つの値のどちらかを取り、どちらも常に選べます。3つ目の選択肢はなく、このページはどちらを意味したかを推測しません。2つの数がどちらも正のときは選択が違いを生まず、2つの約束は余りの符号と、1だけ違う商のほかには何も食い違いません。切り捨てでは余りが負になり得ますが、それは誤りではなくその約束の振る舞いです。下の参考表は±47と±5に固定されており、入力には追随しません。2つの約束を並べて比べられるように4通りの符号の組み合わせを示しており、上の結果欄が入力したものに答えます。値はすべて厳密です。4つの数はどれも機械が正確に保持できる範囲に十分収まった整数なので、ここでは何も丸められません。

よくある質問

同じ割り算に答えが2つあるのはなぜですか
定義が言っているのは、商かける除数たす余りが被除数を返さなければならないということだけで、負の被除数では小さい商と負の余りの組も、大きい商と正の余りの組もそれを満たします。−47 ÷ 5は商を0のほうへ切り捨てれば−9余り−2、下へ丸めれば−10余り3です。どちらも正しく、どちらになるかを決めるのが約束です
どちらの約束を使えばよいですか
切り捨てがここでの既定です。ほとんどのプログラミング言語がその答えを出し、ほとんどの人が整数除算といえばそれを指すからです。商は0のほうへ動き、余りは被除数の符号を引き継ぎます。余りが非負でなければならないときはユークリッドを選んでください。数学的な意味での剰余、周期の中の位置、暦の計算、そして余りが繰り返す一覧への添字になるものすべてです。2つの数がどちらも正なら選択はまったく違いを生みません
除数が負のとき余りはどうなりますか
同じ規則が当てはまり、商の符号が反転します。47 ÷ −5は切り捨てで−9、余りは2です。余りは除数ではなく被除数に従うからです。除数が負であることは商の符号を変え、余りの符号の規則には触れません。表の2行目がそれを示しています
剰余演算と同じものですか
関係はありますが同じではありません。剰余は余りだけを返し、ふつうは結果が非負になるように定義されます。それがここでのユークリッドです。違いは負の入力で現れます。−47の5を法とする剰余は3ですが、切り捨ての整数除算は−2を返します。非負の結果が欲しいならユークリッドを、商を0のほうへ丸めたいなら切り捨てを選んでください
割り切れるときの余りはどうなりますか
どちらの約束でも0です。除数が整数回入るときは何も残らず、検算は三つ目の項を心配せずに除数かける商は被除数と読めます。余りが0は正常な答えで、割り切れたという意味であり、出力が失敗したという意味ではありません
除数が0ではいけないのはなぜですか
検算を満たす商と余りが存在しないからです。除数が0なら0かけるどんな商も0なので、検算は余りが被除数に等しく、かつ絶対値で除数より小さいことを要求することになり、0でない被除数では不可能です。被除数が0の場合も、答えが1つではなくすべての数になってしまいます。このページは任意の何かを返す代わりに拒否します

参考文献

関連する計算ツール