2012-03-21 8 views
0

BCMath libraryを内部的に使用して、PHPで任意の精度の10進数を扱うクラスを構築しています。bcdiv(​​)で除算すると有限の結果が得られるかどうかをチェックする方法は?

adding,subtractingまたはmultiplying 2つの数字を使用すると、必要な精度を予測して数字が失われないようにすることができます。

しかし、divisionの場合、桁数は無限になります。除算の結果を有限桁数で表すことができない場合は、ライブラリに例外がスローされます。

分割する前に、結果が有限である場合はどのように知ることができますか?その場合、結果の縮尺を計算しますか?

答えて

1

%(モジュラス)の操作を待つ必要があります。ああ、SH ...

実際には、実行除外(または同様の手順)自体はできません。

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

また、任意のrational numberは、1/3 = 0.(3)および1/7 = 0.(142857)のようにrepeating decimalと表すことができます。悪い点は、この期間の長さがこの数値の最大値になる可能性があることです。したがって、有理数で正確な計算を実行する場合は、n/mという数値を内部的に表す方が良いです。分母の唯一の素因数が、私はあなたが最低条件に割合を減少させるためのユークリッドのアルゴリズムを実装する必要があると思いますBCMathを使用した2と5

推測されている場合

0

減少割合は有限の10進数表現を持っています分母をテストします。それは問題の価値があるとは思われません。

関連する問題