0

BCMath ライブラリを内部的に使用して、PHP で任意精度の 10 進数を操作するためのクラスを構築しています。

2 つの数値の足し算引き算、または掛け算を行う場合、桁を失わないように必要な精度を予測することができます。

ただし、除算に関しては、桁数が無限になる可能性があり、除算の結果が有限の桁数として表現できない場合、ライブラリで例外をスローしたいと考えています。

除算する前に、結果が有限になるかどうか、またその場合、結果のスケールを計算するにはどうすればよいでしょうか?

4

2 に答える 2

1

%(モジュラス)演算を実行する必要があります...待機します。ああ、SH..。

実際には、除算(または同様の手順)自体を実行しないと不可能です。

divmod整数の除算(つまり、切り捨て)と余りの結果を返す関数を作成することをお勧めします。そして、余りがゼロに等しいことを確認します。

また、任意の有理数は、およびのように循環小数として表すことができます。悪い部分は、期間の長さがこの数値の値までになる可能性があることです。したがって、有理数を使用して正確な計算を実行する場合は、数値を内部として表す方が適切です。1/3 = 0.(3)1/7 = 0.(142857)n/m

于 2012-03-21T21:26:11.547 に答える
0

分母の素因数が 2 と 5 だけの場合、被約分数は有限の 10 進数表現になります。

BCMath を使用すると、分数を最小項に減らすためのユークリッド アルゴリズムを実装してから、分母をテストする必要があると思います。苦労する価値はないようです。

于 2012-03-22T00:27:06.823 に答える