Imaginary base numbers: Difference between revisions

m
→‎{{header|Perl 6}}: Factor out some intermediate variables. Simplify zip routine.
m (→‎{{header|Perl 6}}: Factor out common code, various style tweaks)
m (→‎{{header|Perl 6}}: Factor out some intermediate variables. Simplify zip routine.)
Line 330:
die "Base $radix out of range" unless -6 <= $radix.im <= -2 or 2 <= $radix.im <= 6;
my ($re, $im) = $num.Complex.reals;
my ($re-wh, $re-fr) .= $re.&base( -$radix.im².Int, :precision($precision) ).split: '.';
my ($im-wh, $im-fr) = ($im/$radix.im).&base( -$radix.im².Int, :precision($precision) ).split: '.';
my ($re-wh, $re-fr) = $re.split: '.';
my ($im-wh, $im-fr) = $im.split: '.';
$_ //= '' for $re-wh, $re-fr, $im-wh, $im-fr;
 
sub zip (Str $a, Str $b) {
my @n$l = do'0' givenx ($a.chars cmpmax $b.chars {);
my $n = when Less {[~] flat (flat $a~$l).comb, 0 xx *) Z flat ($b~$l).comb };
when More { flat $an.comb=subst(/ Z'0'+ flat$ (flat $b.comb/, 0 xx *'') };
[~] @$n || '0'
default { flat $a.comb Z flat $b.comb }
}
@n.pop while +@n and @n.tail eq 0;
[~] @n || 0
}
 
10,333

edits