2012-07-03 2 views
0

J'ai cette ligne dans 2 fichiers différents mais dans la même application.PHP - résultats bizarres, non-cohérents de pow()

pow(36, 8); 

On revient -INF alors que les autres déclarations 2821109907456

Y at-il des facteurs externes que je ne suis pas au courant de ce qui cause? Parce que je ne vois pas les entrées comme le problème car elles sont exactement les mêmes.

EDIT: Le code qui renvoie -INF est inclus dans un foreach. Pensée qui pourrait nous donner une idée pourquoi cela arrive.

EDIT 2: La boucle ressemble à ceci

foreach($items as &$item) 
{ 
    foo($item['some_index'], ... , ..., ...); 
} 
unset($item); 

La fonction que la boucle appelle est quelque chose comme

function foo($input, $a, $b, $c) 
{ 
    .... 
    $x = pow(36, 8); 
    ... 
} 
+0

Est exécuté sur un système 32 bits et l'autre sur une plate-forme 64 bits? – sarnold

+0

Le même serveur? – xdazz

+1

Les deux codes sont sur le même système 32 bits. – arvinsim

Répondre

1

La taille d'un entier dépend de la plate-forme et vous pouvez atteindre le max. Essayez d'utiliser la fonction BC Math bcpow à la place de pow

+0

bcpow() renvoie la valeur correctement. Mais je suis plus intéressé à apprendre la cause de l'incohérence pow(). – arvinsim

+1

la taille maximale d'un int sur un système 32 bits est 2147483647. Vous êtes bien au-dessus de cela et obtiendrez débordement int, d'où les résultats "aléatoires". – MDrollette

Questions connexes