diff options
author | Larry Wall <lwall@netlabs.com> | 1993-10-07 23:00:00 +0000 |
---|---|---|
committer | Larry Wall <lwall@netlabs.com> | 1993-10-07 23:00:00 +0000 |
commit | 79072805bf63abe5b5978b5928ab00d360ea3e7f (patch) | |
tree | 96688fcd69f9c8d2110e93c350b4d0025eaf240d /lib/bigint.pl | |
parent | e334a159a5616cab575044bafaf68f75b7bb3a16 (diff) | |
download | perl-79072805bf63abe5b5978b5928ab00d360ea3e7f.tar.gz |
perl 5.0 alpha 2perl-5a2
[editor's note: from history.perl.org. The sparc executables
originally included in the distribution are not in this commit.]
Diffstat (limited to 'lib/bigint.pl')
-rw-r--r-- | lib/bigint.pl | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/lib/bigint.pl b/lib/bigint.pl index 5c79da9898..a2a0da977e 100644 --- a/lib/bigint.pl +++ b/lib/bigint.pl @@ -41,7 +41,7 @@ sub main'bnorm { #(num_str) return num_str local($_) = @_; s/\s+//g; # strip white space if (s/^([+-]?)0*(\d+)$/$1$2/) { # test if number - substr($_,0,0) = '+' unless $1; # Add missing sign + substr($_,$[,0) = '+' unless $1; # Add missing sign s/^-0/+0/; $_; } else { @@ -53,8 +53,8 @@ sub main'bnorm { #(num_str) return num_str # Assumes normalized value as input. sub internal { #(num_str) return int_num_array local($d) = @_; - ($is,$il) = (substr($d,0,1),length($d)-2); - substr($d,0,1) = ''; + ($is,$il) = (substr($d,$[,1),length($d)-2); + substr($d,$[,1) = ''; ($is, reverse(unpack("a" . ($il%5+1) . ("a5" x ($il/5)), $d))); } @@ -87,7 +87,7 @@ sub abs { # post-normalized abs for internal use # Compares 2 values. Returns one of undef, <0, =0, >0. (suitable for sort) sub main'bcmp { #(num_str, num_str) return cond_code - local($x,$y) = (&'bnorm($_[0]),&'bnorm($_[1])); + local($x,$y) = (&'bnorm($_[$[]),&'bnorm($_[$[+1])); if ($x eq 'NaN') { undef; } elsif ($y eq 'NaN') { @@ -109,7 +109,7 @@ sub cmp { # post-normalized compare for internal use } sub main'badd { #(num_str, num_str) return num_str - local(*x, *y); ($x, $y) = (&'bnorm($_[0]),&'bnorm($_[1])); + local(*x, *y); ($x, $y) = (&'bnorm($_[$[]),&'bnorm($_[$[+1])); if ($x eq 'NaN') { 'NaN'; } elsif ($y eq 'NaN') { @@ -132,12 +132,12 @@ sub main'badd { #(num_str, num_str) return num_str } sub main'bsub { #(num_str, num_str) return num_str - &'badd($_[0],&'bneg($_[1])); + &'badd($_[$[],&'bneg($_[$[+1])); } # GCD -- Euclids algorithm Knuth Vol 2 pg 296 sub main'bgcd { #(num_str, num_str) return num_str - local($x,$y) = (&'bnorm($_[0]),&'bnorm($_[1])); + local($x,$y) = (&'bnorm($_[$[]),&'bnorm($_[$[+1])); if ($x eq 'NaN' || $y eq 'NaN') { 'NaN'; } else { @@ -176,7 +176,7 @@ sub sub { #(int_num_array, int_num_array) return int_num_array # multiply two numbers -- stolen from Knuth Vol 2 pg 233 sub main'bmul { #(num_str, num_str) return num_str - local(*x, *y); ($x, $y) = (&'bnorm($_[0]), &'bnorm($_[1])); + local(*x, *y); ($x, $y) = (&'bnorm($_[$[]), &'bnorm($_[$[+1])); if ($x eq 'NaN') { 'NaN'; } elsif ($y eq 'NaN') { @@ -187,7 +187,7 @@ sub main'bmul { #(num_str, num_str) return num_str local($signr) = (shift @x ne shift @y) ? '-' : '+'; @prod = (); for $x (@x) { - ($car, $cty) = (0, 0); + ($car, $cty) = (0, $[); for $y (@y) { $prod = $x * $y + $prod[$cty] + $car; $prod[$cty++] = @@ -202,16 +202,16 @@ sub main'bmul { #(num_str, num_str) return num_str # modulus sub main'bmod { #(num_str, num_str) return num_str - (&'bdiv(@_))[1]; + (&'bdiv(@_))[$[+1]; } sub main'bdiv { #(dividend: num_str, divisor: num_str) return num_str - local (*x, *y); ($x, $y) = (&'bnorm($_[0]), &'bnorm($_[1])); + local (*x, *y); ($x, $y) = (&'bnorm($_[$[]), &'bnorm($_[$[+1])); return wantarray ? ('NaN','NaN') : 'NaN' if ($x eq 'NaN' || $y eq 'NaN' || $y eq '+0'); return wantarray ? ('+0',$x) : '+0' if (&cmp(&abs($x),&abs($y)) < 0); @x = &internal($x); @y = &internal($y); - $srem = $y[0]; + $srem = $y[$[]; $sr = (shift @x ne shift @y) ? '-' : '+'; $car = $bar = $prd = 0; if (($dd = int(1e5/($y[$#y]+1))) != 1) { @@ -235,14 +235,14 @@ sub main'bdiv { #(dividend: num_str, divisor: num_str) return num_str --$q while ($v2*$q > ($u0*1e5+$u1-$q*$v1)*1e5+$u2); if ($q) { ($car, $bar) = (0,0); - for ($y = 0, $x = $#x-$#y-1; $y <= $#y; ++$y,++$x) { + for ($y = $[, $x = $#x-$#y+$[-1; $y <= $#y; ++$y,++$x) { $prd = $q * $y[$y] + $car; $prd -= ($car = int($prd * 1e-5)) * 1e5; $x[$x] += 1e5 if ($bar = (($x[$x] -= $prd + $bar) < 0)); } if ($x[$#x] < $car + $bar) { $car = 0; --$q; - for ($y = 0, $x = $#x-$#y-1; $y <= $#y; ++$y,++$x) { + for ($y = $[, $x = $#x-$#y+$[-1; $y <= $#y; ++$y,++$x) { $x[$x] -= 1e5 if ($car = (($x[$x] += $y[$y] + $car) > 1e5)); } |