Trong Perl, toán tử %
dường như giả định các số nguyên. Ví dụ:Làm thế nào để bạn tính toán div và mod của số dấu chấm động?
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);
cho
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
Bây giờ như bạn có thể thấy, tôi đã đưa ra một "giải pháp" đã tính div
và mod
. Tuy nhiên, những gì tôi không hiểu là những gì có hiệu lực các dấu hiệu của mỗi đối số nên có trên kết quả. Không phải div
luôn là số dương, là số lần n2
phù hợp với n1
? Làm thế nào số học phải làm việc trong tình huống này?
Đối với nền toán học, xem [mô-đun số học] (http://www.math.rutgers.edu/~erowland/modulararithmetic.html) và/hoặc [trừu tượng (hoặc đại số) đại số (http://www.millersville.edu/~bikenaga/abstract-algebra-1/modular-arithmetic/modular-arithmetic.html). – mctylr