1 有理数とその表現

1.1 有理数の定義と基本性質

有理数とは、整数 \(a,b\)(\(b\neq 0\))を用いて \(a/b\) の形に表せる数の総称である。整数の比として定義されるため、加算・減算・乗算・除算(ただし分母が 0 にならない範囲)を行っても、結果は再び有理数になるという安定性がある。 また、有理数は順序に関しても自然な性質をもち、例えば同じ値を表す異なる分数が存在しても、集合としての「数」は一意に対応する。

1.2 分数表示と既約分

分数表示としては、分子と分母を整数で書き、分母は通常正に取ることで見通しをよくする。特に分子と分母に共通の因数がある場合、分子・分母をその因数で割って約分できる。 約分した形で、分子と分母が最大公約数を 1 にもつとき、その分数は既約分数と呼ばれる。既約分数は、同じ有理数を表す分数のうち表現が簡潔で、比較同値判定に有利である。

1.3 表現上の規約(符号・ゼロの扱い)

表現は計算の再現性に直結するため、符号やゼロに関する規約が重要になる。一般的には、分母は正として固定し、符号は分子側に集める。これにより、同じ有理数でも複数の分数が生成される事態を抑えられる。 ゼロは \(0/b\) として表せるが、表現上は特別な扱いとして分子を 0、分母を 1(または任意の正の整数)に正規化することが多い。こうした規約により、ゼロ同士の比較や演算後の正規形生成が容易になる。

2 有理数の四則演算

2.1 加法と減法

2.1.1 通分による計算手順

有理数 \(a/b\) と \(c/d\) の和は、共通の分母を導入して計算する。典型的には通分を行い、共通分母を \(bd\) として \[ \frac{a}{b}+\frac{c}{d}=\frac{ad+bc}{bd} \] のように求める。減法も同様で、分子の部分だけが \(ad-bc\) に変わる。 通分では分母が大きくなりやすいため、実装では後述の効率化(最大公約数を用いた簡略化)と組み合わせて扱うことが多い。

2.1.2 約分のタイミングと結果の既約性

計算結果を有理数として扱う際、分子・分母の共通因子を取り除いて既約分数に整える必要がある。どの時点で約分するかは計算量と数値の成長に影響する。 理想的には、演算の直後に既約化すれば比較が容易になる一方、約分処理自体のコストもある。そのため、実務では中間値の巨大化を避ける範囲で適度に約分し、結果の正規形(既約分数またはそれに準じた形)を保つ方針が採用される。

2.2 乗法

2.2.1 分子・分母の積と符号整理

有理数の積は単純で、\(\frac{a}{b}\cdot\frac{c}{d}\) は \[ \frac{ac}{bd} \] と求められる。符号は分子側に集める規約に従って整理する。 積では分母が乗算で増えるため、約分を行わないと値の大きさが急速に増えることがあり、これが効率面での論点になる。

2.2.2 交差約分による簡略化

乗法では、分子どうし・分母どうしを掛ける前に交差約分(cross-cancellation)を行うことでサイズを抑えられる。具体的には、\(\frac{a}{b}\cdot\frac{c}{d}\) に対し、例えば \(a\) と \(d\) の間、または \(c\) と \(b\) の間で共通因子を検出してから割る。 これにより、結果として得られる分子分母の共通因子が先に除去され、積の計算後に行う約分の負担が軽減される。数学的には同値性を保ったまま表現の大きさだけを改善する操作として位置づけられる。

2.3 除法(逆数を用いる方法)

2.3.1 0による除算の排除

除算は「逆数」を用いて定義される。すなわち \(\frac{a}{b}\div\frac{c}{d}\) は \(\frac{a}{b}\cdot\frac{d}{c}\) に帰着できる。 このとき、逆数を作るために \(c\neq 0\) が必要である。したがって、分母側で 0 を扱う可能性を検査し、除算不能な入力に対して例外やエラーとして処理することが重要になる。

2.3.2 逆数計算と約分

逆数を作る操作では、\(\frac{c}{d}\) を \(\frac{d}{c}\) に変換し、以後は乗法と同様に分子分母の積を計算する。ここでも交差約分を導入すると、約分の効果が大きい。 逆数化の途中で符号規約を守り、分母の正規化を徹底することで、除算後に得られる有理数表現の一貫性が保たれる。

3 有理数演算の代数的性質

3.1 有理数の体(フィールド)としての性格

有理数は演算に関して体(フィールド)の性格をもつ。具体的には、非零の有理数には乗法逆元が存在し、除算が意味をもつ。 この性質は、代数方程式の解の扱いにおいても基礎となり、有理数領域での演算閉性と整合する。

3.2 演算法則の確認(可換・結合・分配)

有理数の加算・乗算は可換であり、順序を入れ替えても同じ結果が得られる。また加算・乗算それぞれは結合的であり、括り方を変えても値は変わらない。 さらに乗算は加算に対して分配的であり、\(\,x(y+z)=xy+xz\,\) の形が成り立つ。これらの法則は、分数の表現が異なっても数としては同一であることを踏まえたうえで、厳密な代数計算として保証される。

3.3 単位元・逆元・吸収

加法には単位元があり、これは 0 である。任意の有理数 \(x\) に対し \(x+0=x\) が成り立つ。 乗法の単位元は 1 であり、\(x\cdot 1=x\) が成立する。非零の有理数 \(x\) には乗法逆元 \(1/x\) が存在し、\(x\cdot(1/x)=1\) が成り立つ。 吸収元としては 0 が重要で、\(x\cdot 0=0\) によって乗算の結果が 0 に固定される性質がある。これにより、式の簡約や項の整理が機械的に可能になる。

4 計算の効率と実装上の注意

4.1 最大公約数(正確な約分)の利用

既約化には分子と分母の最大公約数が用いられる。分子と分母の共通因子を最大まで割り切ることで、代表表現としての既約性が確保される。 最大公約数の計算にはユークリッドの互除法が典型的で、整数同士の演算として効率よく求められる。したがって有理数ライブラリでは、約分の中心操作として最大公約数を組み込むのが一般的である。

4.2 オーバーフローを避ける工夫

分子分母が単純に積になる実装では、途中計算が大きくなり、有限ビット幅の整数型を超える危険がある。これを抑えるには、交差約分や事前の因子分解(ただしコストとの釣り合いが必要)を行う方法がある。 また、任意精度整数(多倍長整数)を使うとオーバーフローそのものを回避しやすいが、計算時間やメモリ消費が増えるため、約分頻度や正規形の維持方針を設計する必要がある。

4.3 約分戦略(毎回約分・必要時約分)

約分にはコストがかかるため、常に最終形として既約化する(毎回約分)か、ある程度の中間で延期する(必要時約分)かは設計選択である。 毎回約分は比較や演算の再利用に有利だが、最大公約数計算を頻繁に行う負担が増える。必要時約分は計算回数を減らせる可能性があるが、中間値が膨張し、結局別の形で効率が悪化することもある。したがって、入力規模や演算回数の見積もりに応じた方針が採られる。

4.4 有限精度での表現との違い(誤差回避の観点)

有理数演算は分数として厳密に表現し、四則演算の結果を同値な有理数として保持できる点が特徴である。浮動小数点のように丸めにより誤差が混入する問題を原理的に回避しやすい。 ただし、計算機上は分子分母の巨大化が現実的な限界を生むため、実装では表現領域(任意精度か固定精度か)や約分戦略が誤差回避に結び付く。つまり「数学的に厳密」でも「実装上の資源」によって挙動が左右されうる。