2013-07-22 2 views
0

я столкнулся проблемы при выполнении математических операций в PHP специально с большим ИНТPHP Операции Arithmatic

Например echo 600851475143 % 3; печатает 0, но 600851475143 не делится на 3

и

факториал 100

933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000 

, но когда я попытался вычислить факториал 100 через следующий код

$n = 100; 
$product = 1; 
for($i = 1 ; $i <= $n ; $i++){ 
    $product = $product*$i; 
} 
$product = sprintf('%f', $product); 

результат был

93326215443944102188325606108575267240944254854960571509166910400407995064242937148632694030450512898042989296944474898258737204311236641477561877016501813248.000000 

Я не уверен, где я не прав или что-то делать с размером переменной

+1

точка неточности плавающей. (используйте bcmul) – bwoebi

ответ

1

См http://floating-point-gui.de/ некоторого объяснения об этой ошибке.

bcmul использует строки для представления данных и будет делать точные расчеты:

$n = 100; 
$product = 1; 
for($i = 1 ; $i <= $n ; $i++){ 
    $product = bcmul($product,$i); 
} 
print $product; 
+0

работал как шарм ... спасибо, но можете ли вы мне помочь и с проблемой модуля? –

+0

http://php.net/bcmod ('bcmod (" 600851475143 ", 3)') – bwoebi

+0

awesome .... boy Я люблю тебя –