Skip to content

Commit

Permalink
Update: 「除法と商・剰余」節の 文言調整と Numeric#/
Browse files Browse the repository at this point in the history
* Numeric の 「除法と商・剰余」節の 文言を 少し 修正した
* Numeric#/ メソッドが なく、リンク切れを 起こして いた ので 追加した
  • Loading branch information
foomin10 committed Jun 11, 2024
1 parent 3351348 commit 00d2da8
Showing 1 changed file with 27 additions and 22 deletions.
49 changes: 27 additions & 22 deletions refm/api/src/_builtin/Numeric
Original file line number Diff line number Diff line change
Expand Up @@ -359,40 +359,37 @@ end

===[a:division] 除法と商・剰余

Numeric には除法(除算;割り算;division)に関わるメソッドがいくつもありますが
Numeric には除法(除算;割り算;division)に関するメソッドがいくつもありますが
除法にはいくつか種類があるため、全貌が把握しづらくなっています。

この節では除法の種類を説明し、各メソッドがどの除法に基づいているのかが分かるようにします。

まず用語ですが、割られる数を被除数(dividend)、割る数を除数(divisor)、
まず用語についてですが、割られる数を被除数(dividend)、割る数を除数(divisor)、
割った結果を商(quotient)と言います。

除法は大きく分けて二つあります
除法は大きく2つに分類できます

そのうちの一つを、ここでは「普通の除法」と呼ぶことにします。

普通の除法は、被除数を x、除数を y、商を q としたとき、x == q×y となるよう定義された除法です。
7 割る 2 を 3.5 とする除法は普通の除法です。
普通の除法は、被除数を x、除数を y、商を q としたとき、x == q⋅y となるよう定義された除法です。
7 割る 2 を 3.5 とする除法は、普通の除法です。

普通の除法における商をここでは「普通の商」と呼ぶことにしましょう。

もう一つの除法は、商が必ず整数になるよう定義されるもので、これを「整除法」と言います。
7 割る 2 を 3 余り 1 とする除法は整除法です
7 割る 2 を 3 余り 1 とする除法は、整除法です

整除法における商をとくに「整商」と言います。
整除法における商を特に「整商」と言います。

整除法では、被除数を x、除数を y、商を q としたとき、x と q×y が一致する(つまり割り切れる)とは限りません。

その差 x − q×y を剰余(余り;remainder)と言います。
整除法では、被除数を x、除数を y、商を q としたとき、x と q⋅y が一致する(つまり割り切れる)とは限りません。
その差 x − q⋅y を剰余(余り;remainder)と言います。
整除法は商と剰余がセットで決まる除法なので「剰余付き除法」とも呼ばれます。

しばしば「整除法は整数の世界でしか成り立たない」と誤解されていますが、
2.5 m の紐から 0.75 m の紐が何本取れて何 m の半端が出るか、という問題を
考えれば、被除数・除数が整数でなくてもよいことが分かります
2.5 メートルの紐から 0.75 メートルの紐が何本取れて何メートルの半端が出るか、という問題を
考えれば、被除数や除数が整数でなくてもよいことが分かります

#@samplecode 例: Float の世界の整商と剰余
p 2.5.divmod(0.75) # => [3, 0.25]
# 2.5 m の紐から 0.75 m の紐が 3 本取れて 0.25 m 余る
# 2.5 メートルの紐から 0.75 メートルの紐が 3 本取れて 0.25 メートル余る
#@end

ただし、複素数の世界では整商・剰余は考えないので、Complex に divmod など
Expand All @@ -417,7 +414,7 @@ fdiv では丸め誤差が生じうることに注意してください。

しかし、どの定義にも共通していることが二つあります。

それは、被除数を x、除数を y としたときの整商を q、剰余を r とすると、第一に
それは、被除数を x、除数を y としたときの整商を q、剰余を r とすると、第一に

x == y * q + r (ただし q は整数)

Expand All @@ -426,7 +423,7 @@ x == y * q + r (ただし q は整数)
ならないということです。

この二つを満たす整商・剰余の定義は何通りもありますが、
Ruby では、剰余に関して二通りの定義を採用し、
Ruby では、2通りの定義を採用し、剰余について
[[m:Numeric#modulo]] メソッドと [[m:Numeric#remainder]] メソッドとして
実装されています。

Expand Down Expand Up @@ -456,17 +453,14 @@ div と modulo の値を一度に配列で返すメソッドです。
となるように定められた剰余です。
定義からすぐ分かるとおり、剰余 r の符号は被除数 x の符号と一致します。

これに対応する整商を得るメソッドはありませんが
remainder に対応する整商を得るメソッドはありませんが
x.quo(y).truncate で得ることができます。

x と y がともに正のときと、ともに負のとき、modulo と remainder は
一致します。
x と y の符号が同じとき、modulo と remainder は一致します。

商を得るメソッドには [[m:Numeric#/]] もあります。
普通はメソッド呼び出しの形ではなく、二項演算子として用います。

これは被除数・除数のクラスによって挙動が異なります。例えば Integer 同士なら div と同じ、Integer や Rational と Float なら quo と同じ、といった具合です。

被除数のクラスの / メソッドの説明をご覧ください。

#@since 3.2.0
Expand Down Expand Up @@ -510,6 +504,17 @@ self の符号を反転させたものを返します。

@see [[m:Integer#-@]]、[[m:Float#-@]]、[[m:Rational#-@]]、[[m:Complex#-@]]

--- /(other) -> Numeric

除算の演算子です。
self を other で割った商を返します。

Numeric では定義されておらず、サブクラスの実装によります。

#@#noexample Integer、Float、Rational、Complex 各クラスに実装されているため

@see [[m:Integer#/]], [[m:Float#/]], [[m:Rational#/]], [[m:Complex#/]]

--- abs -> Numeric
--- magnitude -> Numeric

Expand Down

0 comments on commit 00d2da8

Please sign in to comment.