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

Retourner aux forums || Retourner au forum Programmation.php

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.

--
Je connais bien l'algèbre de Boole, et j'ai même vu tous ses flims.
> Lire le message (3 commentaires, moyenne: 1,7).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

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.

Entiers

Posté par Pascal Terjan (Jabber id, page perso, ) le 01/12/2004 à 10:32. (lien). Évalué à 3.

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). PHP ne supporte pas les entiers non signés.

pow(76,6) est supérieur je pense à ce qui tient sur 32 bits...

Si tu as le module bc pour gerer les grands entiers, essaye bcmod et bcpow, ou plus implement et plus efficacement bcpowmod directement.

  • [^]Re: Entiers

    Posté par Dinofly (page perso, ) le 01/12/2004 à 11:45. (lien). Évalué à 1.

    Merci, ça marche avec bcmod et bcpow !

    --
    Je connais bien l'algèbre de Boole, et j'ai même vu tous ses flims.

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.php