究竟什麼是任意精度的數學?
任意精度算術aka「bignum math」,引入了一種對數字進行算術運算的方式,其中數字的位數只受可用存儲量的限制。這與主機系統的CPU/ALU提供的固定精度算術不同,並且其中所表示的數字的最大尺寸/精度是這些硬件處理器的寄存器的位數的因數。
固定精度算法在存儲方面速度快,效率高,且內置/普遍可用。然而,它適用於有限的(如果僅有時「足夠大」)數值範圍。任意精度算法速度較慢,對存儲有些浪費,需要專門的庫,如GMP或BCMath。
哪些bcmath時和GMP庫之間的差異
最顯着的區別是,GMP適用於[任意精度] 整數值,由此bcmath時允許[任意精度] 小數 /浮類似的價值觀。
既不API難學,但bcmath時可以更直觀的一個位(除了支持浮動狀值)
一種優於另一種典型地由預期用途驅動的特定庫的一個的選擇(或由特定平臺的可用性)。在大量進入MP應用程序之前,大多數庫都會適合賬單並且通常是等價的(在其課程當中,即如果您需要浮點數,則避免使用整數庫)。
BCMath/GMP需要什麼類型的數字?
與大多數任意精度數學包一樣,這兩個庫爲其API使用字符串,即表示它們的輸入和輸出數值。
內部...像GMP這樣的一些軟件包有自己的數字表示。這種結構的具體特點通常是在最小化存儲需求和允許快速計算(包括將這些結構序列化/從序列化到文本文件的序列化/反序列化)之間的妥協。
該問題中的示例"\x12\x23\x45\x67"
被稱爲BCD即二進制編碼小數。它允許每個字節存儲2個十進制數字,有時由Arbitrary Precision Arithmetic庫使用。
來源
2011-08-05 23:45:40
mjv
理論上都允許使用任意長度的數字,只要他們送入庫作爲字符串。它歸結爲具有更好的API用於您的目的。 bc純粹使用字符串,而gmp可以接受字符串,但也使用自己的內部表示。 –
注意:要使用任意精度算術,您可以使用一個庫,例如[磚/數學](https://github.com/brick/math),它會在後臺自動使用GMP,BCMath甚至純PHP ,這取決於每個擴展的可用性。這樣你就不必在GMP和BCMath之間選擇,並且有一個很好的面向對象的API。 – Benjamin