5 our(@e12) = qw(10 12 15 18 22 27 33 39 47 56 68 82);
6 our(@ex24) = qw(11 13 16 20 24 30 36 43 51 62 75 91);
7 our(@e24)= sort @e12, @ex24;
9 our ($tlin,$tlog,@byrat);
13 $$t = sprintf "%-12s |", $h;
17 $$t .= sprintf " %5s", $h;
21 $$t .= "\n".('-'x(12+1)).'+'.('-'x(24*6))."\n";
25 $$t .= sprintf "%12s |", $h;
29 $$t .= sprintf " %5s", $v;
34 $$t .= "\n" if (($n+1) % 6) == 0;
42 while (length(sprintf "%d", $v) < $len) { $v *= 10.0; }
43 return sprintf "%d", $v;
47 $v= sprintf "%".($len+2).".${len}f", $v;
53 my ($row,$col,$lin,$log,$rownum);
55 thead(\$tlin,'X/Y [*10^k]');
56 thead(\$tlog,'frac(L(X/Y))');
68 $lin= $col*1.0 / $row;
69 $log= log($lin)/log(10) + 1.0;
71 cell(\$tlin, mul10fit($lin,5));
72 cell(\$tlog, fracfit($log,5));
74 if ($col < $row) { $lin *= 10; }
76 push @byrat, { Num => $col,
87 push @byrat, { Num => '*',
100 $a->{Lin} <=> $b->{Lin}
105 my ($or,$cwr,$colnum) = @_;
106 $$or .= ' ' if $colnum;
107 $$cwr = ($colnum<6 ? 6 : 5);
113 my ($brrows) = (@byrat+$brcols-1) / $brcols;
114 my ($byrat,$o,$colnum,$rownum,$cw);
116 for ($colnum=0; $colnum<$brcols; $colnum++) {
117 byratcol(\$o,\$cw,$colnum);
118 $o .= sprintf("N/D %".($cw+1)."s %s",
122 for ($colnum=0; $colnum<$brcols; $colnum++) {
123 byratcol(\$o,\$cw,$colnum);
124 $o .= '-' x (5+1+$cw+1+5);
127 for ($rownum=0; $rownum<$brrows; $rownum++) {
128 for ($colnum=0; $colnum<$brcols; $colnum++) {
129 $byrat= $byrat[$colnum*$brrows + $rownum];
130 next unless defined $byrat;
131 byratcol(\$o,\$cw,$colnum);
132 $o .= sprintf("%2s/%-2s %${cw}s %s",
133 $byrat->{Num}, $byrat->{Den},
134 mul10fit($byrat->{Lin}, $cw),
135 fracfit($byrat->{Log}, 5));
142 print "\n" or die $!;