[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: определение Google PR не работает - ошибка операции XOR
pavel_p
скачал обычные скрипты определения PR, настроил на локалхосте - всё работает.
перенес на сервак не работает - несколько дней выяснял причину - докопался до сути, но есть риск что это не единственный глюк который я поймал

причина - неправильная работа с отрицательным float:
на серваке:
Код
cs1816:/var/www/.../robot#  php -r "var_dump((-4738698911)^43814);";
int(-2147439834)

на локалхосте:
Код
C:\....\robot\bak20080415>(-4738698911)^43814);";
int(-443704761)


ясно дело что число -4738698911 не умещается в 32 бита. на локалхосте работает как раз в с этими 32 битами, а на серваке большое отрицательное число переводиться в 0x80000000 (число примерно равное минус 2 млрд)

платформа сервера Debian 4.0 - сдается мне что это корень всех проблем. PHP и 4й и 5й выдают один и тот же бред

попытался исправить ситуацию - просто поменять знак и проихвести оперцию XOR но не могу понять когда делать вычитание на 2 когда не делать

Код
function myxor(&$op1,$op2){
    if(is_float($op1) && $op1<0){
        $op1 = -$op1;
//      $op1 -= 2;
        $sign = -1;
    }else{
        $sign = 1;
    }
    $op1 ^= $op2;
    $op1*=$sign;
}




Спустя 2 года, 2 месяца, 8 дней, 19 часов, 11 минут, 22 секунды (23.06.2010 - 23:48) dj_sedoy написал(а):
Как страшно жить...
А можно пару вопросов:
- вот вы меняете знак переменной, не умещающегося в 31 бит в своей функции, вы искреннее верите, что среда выполнения от этого станет 64 битной? просто если в вас угасла вера - ничего не получится.
- вы искренне верите, что "...на серваке большое отрицательное число переводиться в 0x80000000..." ? давайте проверим Вашу веру - попробуйте сделать echo(var_dump(-4738698911));. Вдруг и правда, выведется "...число примерно равное минус 2 млрд..."
- когда-то давно, ещё в детстве, я обращался к незнакомым людям на улице, просил посчитать мне произведение двух огромных чисел, и каждый раз был послан на три буквы. Я искренне, всей душой верил, что эти три буквы - совсем даже не то, что каждый сейчас подумал. Моя вера была сильна и свершилось! вскоре я узнал, что буквы эти - GMP.

А ваша вера сильна?


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.