小数を分数に直す方法

小数にいちばん近い分数を、分母の上限を守りながら探します。0.375 のように割り切れる小数はぴったり 3/8 になり、円周率のように割り切れない数はいちばん近い分数になります。もとの小数との差も出します。

小数にいちばん近い分数を、分母の上限を守りながら探します。割り切れる小数はぴったりの分数になって差が 0 になり、円周率のように分数で表しきれない数は、上限の中でいちばん近い分数になります。

pqx(qqmax)\dfrac{p}{q} \approx x \quad (q \le q_{\max})

xx が直したい小数、qmaxq_{\max} が分母の上限、pq\dfrac{p}{q} が答えの分数です。答えは既約分数で返し、帯分数ともとの小数との差もあわせて出します。

0.375 を分母 1000 までで直します。0.375=37510000.375 = \dfrac{375}{1000} を約分すると 38\dfrac{3}{8} で、差は 0 です。ぴったり表せる小数なので、上限を 10 まで下げても同じ答えになります。

円周率を分母 1000 までで直すと 355113\dfrac{355}{113} になります。差は 0.0000003 ほどで、小数第 6 位まで一致します。

上限の決め方

上限を大きくするほど近い分数が見つかりますが、分母も大きくなって扱いにくくなります。355113\dfrac{355}{113} のように小さい分母でよく合う分数は、上限を上げてもしばらく入れ替わりません。

循環小数を途中まで書いた 0.3333333333 のような値も、上限が 1000 なら 13\dfrac{1}{3} が返ります。

注意

分母の上限は 1 以上の整数で、100000 までにしてください。

差の符号は、分数がもとの小数より大きいか小さいかを表します。負なら分数のほうが大きい値です。