Supprimer un message
philfr
Passer par des floats pour faire des calculs entiers c'est
D'ailleurs tu risques toujours des erreurs d'arrondi.
Même pour les entiers normaux, il y a un opérateur modulo. Tu peux donc remplacer ton code
$control = $base - floor($base / 97) * 97;
par
$control = $base % 97
Et avec un minimum de mathématiques, tu n'as besoin de rien de plus que les entiers 32 bits:
soit le compte aaa-bbbbbbb-XX. La valeur aaabbbbbbb peut d'écrire aaa * 10000000 + bbbbbbb.
Il suffit donc de calculer 10000000%97 = 76 et de faire le calcul
(76*aaa+bbbbbbb)%97 qui passera toujours en 32 bits...
Un exemple ?
123-4567890-XX
76*123+4567890=4577238
4577238 % 97 = 2
Or 1234567890 % 97 = 2
CQFD.