[PHP] PHP vs. duże liczby całkowite

 

Osoby, które programują w PHP i przetwarzają dane na poziomie bitów, korzystając z pełnego zakresu 32-bitowych liczb, powinny szczególną uwagą zainteresować  się faktem, że język ten nie obsługuje liczb typu UNSIGNED.

Konsekwencje mogą na pierwszy rzut oka wydawać się prozaiczne i stosunkowo łatwo o tej kwestii zapomnieć, w końcu wszystko zaczyna się po przekroczeniu magicznej liczby 0x 7FFF FFFF.

Przesunięcie bitowe w prawo za pomocą operatora >> powoduje dla liczb większych od wspomnianej wartość powielenie bitu znaku.

W innych przypadkach (kiedy nie operujemy na bitach traktując je jako całościową informację binarną) ten problem nas raczej ominie. Prędzej serwer przerwie wykonywanie naszej aplikacji z powodu nadmiernej ilości zużywanej pamięci, lub przekroczenia czasu wykonywania skryptu.

Jak sobie poradzić z problemem dużych liczb w PHP

Zależnie od potrzeb możemy używać modułu BCMATH, albo wycinać właściwą grupę bitów za pomocą operacji BINARY AND (operator &). Ponieważ funkcje BCMATH operują na łańcuchach reprezentujących liczby, tego typu operacje będą mniej wydajne niż operacje na normalnych liczbach, ale za to dają sporo większe możliwości jeśli chodzi o precyzję obliczeń i zakres wartości.

Please publish modules in offcanvas position.