![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 10.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Przepisałem funkcje z JS do PHP i niestety zwraca mi całkowicie inne wyniki, a co lepsze na każdym serwerze wyniki te są zupełnie inne. Natomiast funkcja w JS na każdym komputerze działa prawidłowo. Wydaje mi się, że nigdzie nie zrobiłem literówki. Potrzebuję otrzymać takie same wyniki w PHP jak w JS. Proszę o pomoc (IMG:style_emoticons/default/smile.gif) Z góry dzięki;) //Problem rozwiązany Proszę zamknąć // Proponowane rozwiązanie niestety się nie sprawdziło Ten post edytował robson_admin 4.08.2011, 10:22:02 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jest tu kilka potencjalnych problemów:
1. Deweloperzy PHP dali dupy i długość typu INT jest zmienna, 64 bity na maszynie 64 bitowej i 32 bity na 32 bitowej, stąd przy wszelkich operacjach na bitach dobrze jest rozróżnić na jakiej platformie się pracuje. 2. Na 32 bitowej maszynie INT w PHP ma zakres -2147483648 - 2147483647. Wpisanie 4523419682 powoduje, że liczba ta będzie traktowana nie jako INT, a FLOAT. Rozwiązaniem będzie skorzystanie z GMP. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 10.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jest tu kilka potencjalnych problemów: 1. Deweloperzy PHP dali dupy i długość typu INT jest zmienna, 64 bity na maszynie 64 bitowej i 32 bity na 32 bitowej, stąd przy wszelkich operacjach na bitach dobrze jest rozróżnić na jakiej platformie się pracuje. 2. Na 32 bitowej maszynie INT w PHP ma zakres -2147483648 - 2147483647. Wpisanie 4523419682 powoduje, że liczba ta będzie traktowana nie jako INT, a FLOAT. Rozwiązaniem będzie skorzystanie z GMP. Wychodzi na to że mam 64 bitowy system. Może jakoś na tym systemie da się to zrobić? Niestety nie mam w kompilowanej obsługi GMP...
Ten post edytował robson_admin 3.08.2011, 13:38:57 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
A zastosowałeś się do:
Cytat Under Windows you will need to uncomment the line ;extension=php_gmp.dll within the php.ini and restart Apache. ? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 10.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Całość jest trochę pokręcona.
W JS liczby (typ Number) są przechowywane wewnętrznie jako typ FLOAT, który udostępnia 53-bitową (czy coś koło tego) precyzję dla liczb całkowitych. Jednakże wszystkie operacje bitowe (włącznie z przesunięciami) są już realizowane na 32-biotwej reprezentacji argumentów operatora: przykład W PHP natomiast liczby (całkowite) są przechowywane jako 32-bitowy lub 64-bitowy INTEGER, a operacje na bitach są w ich przypadku przeprowadzone na pełnej reprezentacji tych liczb (czyli ponownie 32 lub 64 bity są brane pod uwagę). Niestety wszystkie serwisy z serii "wrzuć i odpal kod online" jakie znam działają na 32-bitowych maszynach więc bez przykładu. (IMG:style_emoticons/default/wink.gif) Dlatego też chcąc przenieść ten kod z JS do PHP musiałbyś: 1. Zadbać o to by początkowe argumenty przekazane do funkcji miały dokładnie taką samą reprezentację bitową. 2. W PHP rozróżniać systemy 32-u i 64-o bitowe, co wiąże się z użyciem różnych wartości przesunięć. 3. W PHP na maszynach 64-bitowych wyniki wszystkich operacji bitowych ucinać do ostatnich 32-bitów. Cytat niestety to nie jest serwer na Windowsie.... http://pl.php.net/manual/en/gmp.installation.phpA jeżeli nie chce Ci się / nie masz możliwości ponownie komplować może chociaż uda Ci się wrzucić gotowy plik php_gmp.so? Ten post edytował Crozin 3.08.2011, 15:08:56 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 18.09.2025 - 15:59 |