小数にいちばん近い分数を、分母の上限を守りながら探します。0.375 のように割り切れる小数はぴったり 3/8 になり、円周率のように割り切れない数はいちばん近い分数になります。もとの小数との差も出します。
小数にいちばん近い分数を、分母の上限を守りながら探します。割り切れる小数はぴったりの分数になって差が 0 になり、円周率のように分数で表しきれない数は、上限の中でいちばん近い分数になります。
が直したい小数、 が分母の上限、 が答えの分数です。答えは既約分数で返し、帯分数ともとの小数との差もあわせて出します。
0.375 を分母 1000 までで直します。 を約分すると で、差は 0 です。ぴったり表せる小数なので、上限を 10 まで下げても同じ答えになります。
円周率を分母 1000 までで直すと になります。差は 0.0000003 ほどで、小数第 6 位まで一致します。
上限を大きくするほど近い分数が見つかりますが、分母も大きくなって扱いにくくなります。 のように小さい分母でよく合う分数は、上限を上げてもしばらく入れ替わりません。
循環小数を途中まで書いた 0.3333333333 のような値も、上限が 1000 なら が返ります。
分母の上限は 1 以上の整数で、100000 までにしてください。
差の符号は、分数がもとの小数より大きいか小さいかを表します。負なら分数のほうが大きい値です。