Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Programmation.php : Modulo sur des gros nombres

Posté par Dinofly (page perso, ) le 01 décembre 2004
Bonjour,

J'ai converti une fonction de chiffrement assez basique du Javascript vers le PHP, mais les résultats ne sont pas ceux que j'attends.

Il semble que PHP ait des difficultés pour calculer un modulo sur des grands nombres.



Voici l'extrait qui pose problème:



Javascript



Math.pow(M, e) % N





PHP



pow($M, $e) % $N





Avec les valeurs suivantes:

M = 76

e = 7

N = 306353



PHP me retourne -259931.

Javascript me retourne 129131.



Alors la question est: j'ai fait une connerie quelque part ou c'est un bug de PHP ?

Merci d'avance pour vos réponses éclairées.

> Lire le message (3 commentaires, moyenne: 1,7).  

Vous avez demandé le commentaire #504354.

Controle de l'erreur.

Posté par gerald dumas (page perso, ) le 01/12/2004 à 10:22. (lien). Évalué à 1.

Selon la doc :

 7.50.45 pow()Expression exponentielle
[ Exemples avec pow ]   PHP 3, PHP 4

number  pow ( number   base , number   exp )

pow retourne base élevé à la puissance exp . Si possible, pow retourne un integer .

Si le calcul ne peut être fait, une alerte sera affichée et pow retournera FALSE .
Quelques exemples avec pow


<?php

var_dump( pow(2,8) ); // int(256)
echo pow(-1,20); // 1
echo pow(0, 0); // 1

echo pow(-1, 5.5); // error

?>

Attention

En PHP 4.0.6 plus ancien, pow retournait toujours un nombre à virgule flottante ( float ), et n'affichait pas d'alerte. Si le calcul est impossible (racine d'un nombre négatif, par exemple), pow retournait NAN .

Voir aussi exp et sqrt . 
pow ne retourne qu'un integer. Vérifie si pow ne te renvoie pas FALSE ( ou NAN ) selon la version que tu utilises.