En Perl, l'opérateur %
semble supposer des entiers. Par exemple:Comment calculez-vous div et mod de nombres à virgule flottante?
sub foo {
my $n1 = shift;
my $n2 = shift;
print "perl's mod=" . $n1 % $n2, "\n";
my $res = $n1/$n2;
my $t = int($res);
print "my div=$t", "\n";
$res = $res - $t;
$res = $res * $n2;
print "my mod=" . $res . "\n\n";
}
foo(3044.952963, 7.1);
foo(3044.952963, -7.1);
foo(-3044.952963, 7.1);
foo(-3044.952963, -7.1);
donne
perl's mod=6
my div=428
my mod=6.15296300000033
perl's mod=-1
my div=-428
my mod=6.15296300000033
perl's mod=1
my div=-428
my mod=-6.15296300000033
perl's mod=-6
my div=428
my mod=-6.15296300000033
Maintenant, comme vous pouvez le voir, je suis venu avec une "solution" déjà pour le calcul div
et mod
. Cependant, ce que je ne comprends pas, c'est l'effet que le signe de chaque argument devrait avoir sur le résultat. Le div
ne serait-il pas toujours positif, étant le nombre de fois que n2
correspond à n1
? Comment l'arithmétique est-elle censée fonctionner dans cette situation?
Pour l'arrière-plan mathématique, voir [arithmétique modulaire] (http://www.math.rutgers.edu/~erowland/modulararithmetic.html) et/ou [résumé (ou algèbre élémentaire] (http://www.millersville.edu/~bikenaga/abstract-algebra-1/modular-arithmetic/modular-arithmetic.html). – mctylr