есть ли разница для математики PHP4 и PHP5

SiMM

Новичок
-4738672007 = 0xFFFFFFFEE58D9A79 (64-битная арифметика)
-443704711 = 0xE58D9A79 (0xFFFFFFFFE58D9A79) (32-битная арифметика)
PHP:
$zz = gmp_init("-4738698913",10);  
$zz = gmp_xor($zz, gmp_init("43814",10));
$zz = gmp_strval(gmp_and($zz, gmp_init(sprintf('%u',0xFFFFFFFF),10)),10);
if ($zz>0x7FFFFFFF) $zz -= 0xFFFFFFFF+1;
echo $zz;
 

Sergey_Al

Новичок
У меня тоже была такая проблема, правда не помню на какой ОС и версии ПХП, исправил так:

PHP:
function mix($a,$b,$c) { 	
	
	$a = ($a + 4294967296) % 2147483648;
	$b = ($b + 4294967296) % 2147483648;
	$c = ($c + 4294967296) % 2147483648;	
		
    $a = ($a - $b + 4294967296)%2147483648; $a = ($a - $c + 4294967296)%2147483648; $a ^= (zeroFill($c,13));    
    $b = ($b - $c + 4294967296)%2147483648; $b = ($b - $a + 4294967296)%2147483648; $b ^= ($a<<8); 
    $c = ($c - $a + 4294967296)%2147483648; $c = ($c - $b + 4294967296)%2147483648; $c ^= (zeroFill($b,13)); 
    $a = ($a - $b + 4294967296)%2147483648; $a = ($a - $c + 4294967296)%2147483648; $a ^= (zeroFill($c,12)); 
    $b = ($b - $c + 4294967296)%2147483648; $b = ($b - $a + 4294967296)%2147483648; $b ^= ($a<<16); 
    $c = ($c - $a + 4294967296)%2147483648; $c = ($c - $b + 4294967296)%2147483648; $c ^= (zeroFill($b,5)); 
    $a = ($a - $b + 4294967296)%2147483648; $a = ($a - $c + 4294967296)%2147483648; $a ^= (zeroFill($c,3));
    $b = ($b - $c + 4294967296)%2147483648; $b = ($b - $a + 4294967296)%2147483648; $b ^= ($a<<10);	
    $c = ($c - $a + 4294967296)%2147483648; $c = ($c - $b + 4294967296)%2147483648; $c ^= (zeroFill($b,15));	
    
    return array($a,$b,$c); 
}
Интересно узнать, работает ли ? :)
 
Сверху