Question

Perl

print 2 % -18;

- >

-16

Tcl

puts [expr {2 % -18}]

- >

wscript.echo 2 mod -18

mais VBScript

2

- >

<*>

Pourquoi cette différence?

Était-ce utile?

La solution

La la réponse wikipedia est assez utile ici.

En résumé, tout entier peut être défini comme

a = qn + r

où toutes ces lettres sont des entiers et

0 < = | r | < | n |.

Presque tous les langages de programmation nécessiteront que (a / n) * n + (a% n) = a. Ainsi, la définition du module dépendra presque toujours de la définition de la division entière. Il existe deux choix pour la division entière par des nombres négatifs 2 / -18 = 0 ou 2 / -18 = -1. En fonction de celui qui est vrai pour votre langue, l’opérateur% changera généralement.

Cela est dû au fait que 2 = (-1) * -18 + (-16) et 2 = 0 * -18 + 2.

Pour Perl, la situation est compliquée. La page de manuel indique: " Notez que lorsque l'utilisation est un entier, portée, "% " vous donne un accès direct à l'opérateur de module tel qu'il est implémenté par votre compilateur C. Cet opérateur n'est pas aussi bien défini pour les opérandes négatifs, mais il s'exécutera plus rapidement. " Donc, il peut choisir l'une ou l'autre option pour Perl (comme C) si use entier est dans la portée. Si use integer n’est pas dans le champ d’application, le manuel indique & Quot; Si $ b est négatif, alors $ a% $ b est $ a moins le plus petit multiple de $ b qui n’est pas inférieur à $ a (c’est-à-dire que le résultat sera inférieur ou égal à zéro). "

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