2012-03-21 49 views
0

我在使用BCMath library在內部構建了一個在PHP中使用任意精度十進制數字的類。如何檢查帶有bcdiv(​​)的分區是否會產生有限的結果?

addingsubtractingmultiplying兩個數字時,可以預測所需的精度以確保不丟失任何數字。

但是,當涉及到division時,數字的數量可能是無限的,並且如果分割的結果不能表示爲有限的數字位數,我希望我的庫拋出異常。

如何在分割前知道結果是否是有限的,並在這種情況下計算結果的尺度?

回答

1

您需要執行%(模數)操作...等待。哦,SH ...

實際上,如果不進行分工(或類似的步驟)本身,這是不可能的。

我可能會建議你創建一個divmod函數,它將返回整數除法結果(即舍入)和餘數。並檢查餘數是否等於零。

還可以將任何rational number表示爲repeating decimal,如1/3 = 0.(3)1/7 = 0.(142857)。不好的部分是週期長度可能高達這個數字的值,因此如果想用有理數進行精確計算,最好在內部表示數字爲n/m

0

減小的部分具有有限的十進制表示,如果分母唯一的質因子是2和5

使用bcmath時,我想你必須執行歐幾里德算法用於降低分數最低條款然後測試分母。這似乎不值得麻煩。

相關問題