Probleme PHP modulo

Probleme PHP modulo - Programmation

Marsh Posté le 28-11-2001 à 22:23:00    

J ai un probleme avec l'operateur arithmetique modulo soit %
Lorsque je fais 10 % 3 j ai bien comme resultat 1.
si je vais 123456789 % 97 j ai le bon ressultat.
Mais lorsque mon chiffre fait au moins 11 caractere le resultat n'est pas bon !
Savez vous pkoi ca ne marche pas avec des nombre a plus de 10 caractere alors que les autres oprerations marchent tres bien ?
Avez vous une solution ?
 
Merci de votre aide .

Reply

Marsh Posté le 28-11-2001 à 22:23:00   

Reply

Marsh Posté le 28-11-2001 à 22:25:47    

peut-être que tu dois caster le chiffre en (double).

Reply

Marsh Posté le 28-11-2001 à 22:28:49    

ok je vais essayer
mais c bizare pke la division marche bien mais pas le modulo
j ai un resultat erroné !!
 
je te remercie.

Reply

Marsh Posté le 28-11-2001 à 23:20:38    

Dans la doc, y disent que si un entier dépasse la valeur maxi : "La taille des entiers dépend de la plate-forme de support, mais la valeur maximale est généralement de 2 milliards et des poussières (c'est un entier signé de 32 bits)" il est automatiquement casté en float.
C'est ce qui doit donc se passer, mais alors la, gaffe à la perte de précision ! Une erreur qui est peut-être minime sur une division peut devenir n'importe quoi sur un modulo !
Je connais pas leur algo pour le modulo, mais c'est sûr qu'il merde pour les grand nombre, surement a cause de la perte de précision.
 
essaye :
 
$Nombre = 12345678901;  // grand nombre divisé par 97
$div = $nombre / 97;    // $div = résultat de la division
$frac = $div - floor( $div );   // $frac = partie après la virgule
$mod = ceil($frac * 97);   // Modulo !
 
Dans cet exemple, le modulo trouvé est 21, ce que la calculatrice de windows confirme !
 
Sinon, pour manipuler des grand nombres, y'a des libs spécialisés : http://www.php.net/manual/fr/ref.bc.php


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 28-11-2001 à 23:24:42    

je te remercie c super sympa
j'essaierai ca demain au taff
donc ca explique bien mes erreur pour mes grands nombres
 
encore merci.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed