Blog programisty o C/C++ i PHP

Programowanie w C/C++ i PHP. Blog pełen wskazówek, porad, analiz i opisów.

PHP vs. duże liczby całkowite

luty 13th, 2008 in Programowanie w PHP

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.

Tags:

Leave a Reply