Arithmetic coding/As a generalized change of radix: Difference between revisions
Content added Content deleted
m (→{{header|Perl}}: minor code simplification) |
m (→{{header|Perl}}: Optimized the decoding process) |
||
Line 256: | Line 256: | ||
# frequencies of all previously occurring symbols |
# frequencies of all previously occurring symbols |
||
foreach my $c (@chars) { |
foreach my $c (@chars) { |
||
$L->bmuladd($base, $cf{$c}*$pf); |
$L->bmuladd($base, $cf{$c} * $pf); |
||
$pf->bmul($freq{$c}); |
$pf->bmul($freq{$c}); |
||
} |
} |
||
Line 301: | Line 301: | ||
# Decode the input number |
# Decode the input number |
||
my $decoded = ''; |
my $decoded = ''; |
||
for (my $ |
for (my $pow = $base**($base - 1) ; $pow > 0 ; $pow /= $base) { |
||
⚫ | |||
my $pow = $base**$i; |
|||
⚫ | |||
my $c = $dict{$div}; |
my $c = $dict{$div}; |
||
Line 310: | Line 308: | ||
my $cv = $cf{$c}; |
my $cv = $cf{$c}; |
||
$enc = ($enc - $pow * $cv) / $fv; |
|||
$enc = $rem; |
|||
$decoded .= $c; |
$decoded .= $c; |
||
} |
} |