Calculs erronés

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Calculs erronés

Re: Calculs erronés

par Bosse.cie » 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.

Re: Calculs erronés

par Mazarini » 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.

Re: Calculs erronés

par devlop78 » 06 janv. 2011, 02:57

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

Re: Calculs erronés

par devlop78 » 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

Re: Calculs erronés

par Mazarini » 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.

Re: Calculs erronés

par Bosse.cie » 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.

Re: Calculs erronés

par stealth35 » 05 janv. 2011, 14:15

avec ton premier code j'ai

Numéro avant calcul : -1630269385312-
Clé calculée : -156-
interm=1630269385312
interm après corse=1630269385312
interm après modulo=-59
interm fin=156

mais devlop78 t'as répondu, tu bosses avec des chiffres trop grand utilise bc_math

Re: Calculs erronés

par Bosse.cie » 05 janv. 2011, 13:10

Excusez de déranger là, rien contre le délire; mais si on pouvait revenir un chouïa à mon problème, et à sa résolution, ça m'arrangerait là.

Merci.

Re: Calculs erronés

par devlop78 » 05 janv. 2011, 01:56

Bah c'est vrai ça, je trouve que les fonctions php sont trop éparpillées. On devrait avoir String.xxxx (comme String.strlen() etc), PDO (c'est déjà le cas ;p), etc. Chacun son boulot, non mais ho !

"Bienvenue !!!"::toUpper()::substr(0,-2);
ouai du full object à la ruby ducoup :wink:

ps : ce que je t'ai montré ca existe vraiment c'est avec l'extension spidermonkey :mrgreen:
Ruby sur l'ongle ??? :shock:

Re: Calculs erronés

par devlop78 » 05 janv. 2011, 01:56

Bah c'est vrai ça, je trouve que les fonctions php sont trop éparpillées. On devrait avoir String.xxxx (comme String.strlen() etc), PDO (c'est déjà le cas ;p), etc. Chacun son boulot, non mais ho !

"Bienvenue !!!"::toUpper()::substr(0,-2);
ouai du full object à la ruby ducoup :wink:

ps : ce que je t'ai montré ca existe vraiment c'est avec l'extension spidermonkey :mrgreen:
Oui je connaissais déjà (même si jamais essayé), mais je ne vois pas trop l'intérêt. Surtout que JavaScript n'est pas full object, et qu'en terme de typage (et autres d'ailleurs), il est loin d'être une référence ... Perso, je reste toujours sur un langage que j'ai pu découvrir ... :D

String Stealth = "stealth35 va bien";
try {
System.io.echo Stealth.replace ("stealth", "devlop78");
} catch (Exception e) {
System.io.echo "Nous allons mal";
}

Re: Calculs erronés

par stealth35 » 05 janv. 2011, 01:35

Bah c'est vrai ça, je trouve que les fonctions php sont trop éparpillées. On devrait avoir String.xxxx (comme String.strlen() etc), PDO (c'est déjà le cas ;p), etc. Chacun son boulot, non mais ho !

"Bienvenue !!!"::toUpper()::substr(0,-2);
ouai du full object à la ruby ducoup :wink:

ps : ce que je t'ai montré ca existe vraiment c'est avec l'extension spidermonkey :mrgreen:

Re: Calculs erronés

par devlop78 » 05 janv. 2011, 01:27

Bah c'est vrai ça, je trouve que les fonctions php sont trop éparpillées. On devrait avoir String.xxxx (comme String.strlen() etc), PDO (c'est déjà le cas ;p), etc. Chacun son boulot, non mais ho !

"Bienvenue !!!"::toUpper()::substr(0,-2);

Re: Calculs erronés

par stealth35 » 04 janv. 2011, 22:29

C'est déjà honteux d'avoir une fonction floor(). Ca veut rien dire ! Un petit Math::floor() serait tellement plus logique :p

Moi, j'dis ça, j'dis rien !

:p a++
$a = 3.3;
$js = new JSContext();

$js->assign('a', $a);

$script = <<<END
  return Math.floor(a);
END;

echo $js->evaluateScript($script);
:mrgreen:

Re: Calculs erronés

par devlop78 » 04 janv. 2011, 20:34

C'est déjà honteux d'avoir une fonction floor(). Ca veut rien dire ! Un petit Math::floor() serait tellement plus logique :p

Moi, j'dis ça, j'dis rien !

:p a++

Re: Calculs erronés

par Spols » 04 janv. 2011, 11:45

function modulo($a, $b) {

	return $a - $b * floor($a/$b);

}
Si ce code ne fonctionne pas non plus chez OVH, tu as une piste, c'est donc la fonction floor() qui bug