Question

Dérivé de cette question: (Java) Comment ne java effectuer des calculs de module avec des nombres négatifs

Anywhere pour forcer PHP à rendement positif 51?

mise à jour
Vous cherchez un paramètre de configuration pour fixer, à la place dur deviner

ou une autre fonction mathématique comme bcmath?

mise à jour
Non convaincu par toute cette réponse java, car il ne tient pas compte du module négatif -13+(-64) =?

Était-ce utile?

La solution

Si GMP est disponible, vous pouvez utiliser gmp_mod

  

Calcule n modulo d. Le résultat est toujours non négatif, le signe de d est ignoré.

Exemple:

echo gmp_strval(gmp_mod('-13', '64')); // 51

Notez que n et d doivent être des ressources numériques BPF ou des chaînes numériques. Rien d'autre ne sera pas work¹

echo gmp_strval(gmp_mod(-13, 64));
echo gmp_mod(-13, 64);

sera à la fois le retour au lieu -51 ( qui est un bug ).

¹ en cours d'exécution ci-dessus dans cette CodePad, produira 51 dans les trois cas. Il ne le fera pas sur ma machine de développement.

Autres conseils

Quoi qu'il en soit, le poste que vous avez mentionné déjà donné la réponse correcte:

$r = $x % $n;
if ($r < 0)
{
    $r += abs($n);
}

Où $ x = -13 et n = 64 $.

L'opération modulo doit trouver le reste de la division d'un nombre par un autre. Mais à strictement parler dans la plupart des langages de programmation grand public les dysfonctionnements de fonctionnement modulo si dividende et / ou diviseur sont négatifs . Cela inclut PHP, Perl, Python, Java, C, C ++, etc.

Pourquoi je dis un dysfonctionnement? Parce que, selon la définition mathématique, un reste doit être nul ou positif .

La solution simple consiste à traiter le cas vous:

if r < 0  then r = r + |divisor|;

| divisor | est la valeur absolue du diviseur.

Une autre solution consiste à utiliser une bibliothèque (comme @Gordon a). Cependant, je ne voudrais pas utiliser une bibliothèque pour traiter un cas simple comme celui-ci.

Le manuel PHP indique que

  

Le résultat du% de l'opérateur de module a le même signe que le dividende - qui est le résultat de $ a% $ b aura le même signe que $ a. Par exemple

donc ce n'est pas configurable. Utilisez les options proposées dans la question que vous lié à

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top