Calculs erronés

Eléphant du PHP | 94 Messages

05 janv. 2011, 15:01

Rectification : La méthode avec floor fonctionne.

Peut-être avais-je fait une erreur en la copiant dans le script ? !

Je ne sais pas.
Ce qui est bizarre, c'est que j'ai essayé aussi en local et ça fonctionnait...

En tous cas, merci.

ViPHP
ViPHP | 2577 Messages

05 janv. 2011, 18:16

Bonjour,
La taille d'un entier est dépendant de la plate-forme, cependant, une valeur maximale d'environ 2 milliards est habituelle (cela correspond à 32 bits signés). Les plateformes 64-bit ont habituellement une valeur maximale d'environ 9E18. PHP ne supporte pas les entiers non-signés. La taille d'un entier peut être déterminée en utilisant la constante PHP_INT_SIZE, et la valeur maximale, en utilisant la constante PHP_INT_MAX depuis PHP 5.0.5.
Source : http://php.net/manual/fr/language.types.integer.php

A défaut de répondre à ta question, ca explique le comportement entre les 2 machines.

devlop78
Invité n'ayant pas de compte PHPfrance

06 janv. 2011, 02:56

Bonjour,
La taille d'un entier est dépendant de la plate-forme, cependant, une valeur maximale d'environ 2 milliards est habituelle (cela correspond à 32 bits signés). Les plateformes 64-bit ont habituellement une valeur maximale d'environ 9E18. PHP ne supporte pas les entiers non-signés. La taille d'un entier peut être déterminée en utilisant la constante PHP_INT_SIZE, et la valeur maximale, en utilisant la constante PHP_INT_MAX depuis PHP 5.0.5.
Source : http://php.net/manual/fr/language.types.integer.php

A défaut de répondre à ta question, ca explique le comportement entre les 2 machines.
Que l'on m'explique alors la différence entre un floor(int) et un floor(float), car à ma connaissance, et selon toute logique, un integer trop gros devient un float (enfin, si on peut dire). Ce n'est pas comme si il avait fait $machin = (int)58996655442211

devlop78
Invité n'ayant pas de compte PHPfrance

06 janv. 2011, 02:57

Et ça n'explique pas la valeur négative du modulo ...

ViPHP
ViPHP | 2577 Messages

06 janv. 2011, 09:26

Bonjour,

Le fait qu'une machine soit en 32 bit et une autre en 64 bit (à vérifier) explique un comportement différent. "Explique" est peut être un peu exagéré, à défaut celà rend la différence moins surprenante.

Concernant le résultat faux, quand on passe n'importe quoi à une fonction ou tout du moins un argument non prévu, on peut s'attendre à des surprises.

Pour ma part, je suis content d'avoir appris qu'une constante PHP contient l'entier max et que dépasser ce max expose à des problèmes. Après je n'ai pas l'intention de poster un bug PHP sur le calcul du modulo.

Eléphant du PHP | 94 Messages

07 janv. 2011, 18:21

A noter que je suis en 64 bit chez moi; par contre, chez ovh, aucun idée.

Merci en tous cas pour l'aide.

Le tout commence à fonctionner correctement chez ovh; ouf.