Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Ошибка в скрипте на сервере |
Автор: Levsha 8.6.2007, 01:49 | ||
Здравствуйте. Есть такой вот элементарный код:
Локально все высчитывается правильно, возвращается число -443704711. Но сервер упорно возвращает -2147439834. Почему сервер может считать неправильно? И там и там PHP5. Вроде операция относится к стандартным логическим, и отдельной библиотеки для нее не нужно, хотя я с трудом понимаю, что делает эта операция. |
Автор: vasac 8.6.2007, 10:53 |
Потому что на сервере может быть одна архитектура, а на локалке другая. Потому что сервер может хранить целые числа в одном размере, а локалка в другом (ваше число даже в 32-битные не входит) Потому что сервер может хранить отрицательные числа одним образом, а локалка другим. |
Автор: Levsha 8.6.2007, 14:20 | ||
Вот-вот. Там какие-то проблемы с отрицательными числами, опытным путем установил. Как мне это обойти? Какое именно действие выполняется в $a = $b ^ $c ? Может у кого есть заменяющая функция? |
Автор: WolfON 8.6.2007, 14:25 |
http://ru2.php.net/integer Обновите версию интерпретатора. Ну или если все совсем плохо, то: http://ru2.php.net/manual/ru/ref.bc.php и http://ru2.php.net/manual/ru/ref.gmp.php |
Автор: vasac 8.6.2007, 15:28 |
Зачем вы выполняете действие, которое не знаете? |
Автор: Levsha 8.6.2007, 16:08 |
vasac, это действие используется в генерации ключа, скрипт чужой. Но мне нужно сгенерировать тот-же ключ. Локально получилось, получается проблема только в сервере. Вот и тужусь. Каким образом? В смысле весь PHP обновить? Он и так пятый. За ссылки спасибо, изучаю |
Автор: Levsha 8.6.2007, 19:59 | ||
Кто нибудь знает что именно выполняет оператор ^ ? Поигрался с двоичными значениями, наткнулся на следующее, стандартные операторы преобразования в двоичное и обратно врут с отрицательными значениями:
Кто нибудь знает точное правило преобразования отрицательного числа в двоичное? Добавлено через 49 секунд В смысле сам алгоритм? Мож кто выполнял этот алгоритм? |
Автор: vasac 8.6.2007, 20:05 |
Он выполняет ровно то, что написано в документации — побитовое исключающее ИЛИ. Отрицательные обычно хранятся в дополнительном коде — инвертируются все биты и прибавляется единица. Как можно понять, результат при этом будет сильно зависеть от количества битов в числе. Конвертация десятичных в двоичные не даст представления о том, как числа хранятся в памяти. |
Автор: sTa1kEr 8.6.2007, 21:35 | ||||||||
Но так как,
То работать на 32-х битной архитектуре это не будет. И обновление PHP здесь, к сожалению, никак не поможет. А вот GMP Functions (см. ссылку WolfON) тут как раз подойдут.
|
Автор: Levsha 10.6.2007, 09:50 |
Разобрал функцию по кусочкам, полностью вручную переписал её действие но все равно не подошло. sTa1kEr, так ведь на чужом хостинге сижу. Они новый модуль ставить не будут. Менять надо на фиг хостеров. В общем скоро новую тему создам, сюда отпишусь. |