제가 여기에 질문은 처음이네요...
...
PHP '% operator' 연산이 bug 인지 bogus 인지는 잘 모르겠지만
double 형 데이타 값이 2^31(2147483648)부터
오류(?)가 있더군요.
Zend/zend_operators.h
(#define MAX_LENGTH_OF_DOUBLE 32)
<?php
## '%' operator
##
## Returns the floating point remainder (modulo)
## of the division of the arguments
##
function mod($x, $y)
{
if(function_exists('fmod')) return fmod($x,$y); // PHP/4.2.x
return $x - (floor($x/$y) * $y);
}
$start = pow(2,31) - 2;
$end = $start + 5;
for($i=$start; $i<$end; $i++)
{
echo "$i : ".($i%10).' : '.mod($i,10).'<BR>';
}
?>
위의 결과를 한번 테스트 해 보시길 바랍니다.
GNU/Linux, glibc 2.2, 2.2.4, PHP 4.2.x, 4.1.x 에서는 다음과 같은 결과를
내더군요.
--------------------------
2147483646 : 6 : 6
2147483647 : 7 : 7
2147483648 : -8 : 8
2147483649 : -7 : 9
2147483650 : -6 : 0
--------------------------
저의 무식함 때문인지... T.T
|