BCMath ライブラリを内部的に使用して、PHP で任意精度の 10 進数を操作するためのクラスを構築しています。
2 つの数値の足し算、引き算、または掛け算を行う場合、桁を失わないように必要な精度を予測することができます。
ただし、除算に関しては、桁数が無限になる可能性があり、除算の結果が有限の桁数として表現できない場合、ライブラリで例外をスローしたいと考えています。
除算する前に、結果が有限になるかどうか、またその場合、結果のスケールを計算するにはどうすればよいでしょうか?
BCMath ライブラリを内部的に使用して、PHP で任意精度の 10 進数を操作するためのクラスを構築しています。
2 つの数値の足し算、引き算、または掛け算を行う場合、桁を失わないように必要な精度を予測することができます。
ただし、除算に関しては、桁数が無限になる可能性があり、除算の結果が有限の桁数として表現できない場合、ライブラリで例外をスローしたいと考えています。
除算する前に、結果が有限になるかどうか、またその場合、結果のスケールを計算するにはどうすればよいでしょうか?
%
(モジュラス)演算を実行する必要があります...待機します。ああ、SH..。
実際には、除算(または同様の手順)自体を実行しないと不可能です。
divmod
整数の除算(つまり、切り捨て)と余りの結果を返す関数を作成することをお勧めします。そして、余りがゼロに等しいことを確認します。
また、任意の有理数は、およびのように循環小数として表すことができます。悪い部分は、期間の長さがこの数値の値までになる可能性があることです。したがって、有理数を使用して正確な計算を実行する場合は、数値を内部として表す方が適切です。1/3 = 0.(3)
1/7 = 0.(142857)
n/m
分母の素因数が 2 と 5 だけの場合、被約分数は有限の 10 進数表現になります。
BCMath を使用すると、分数を最小項に減らすためのユークリッド アルゴリズムを実装してから、分母をテストする必要があると思います。苦労する価値はないようです。