X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/73b157a0d9ee1fc503c8501df01ae8269e1ef28d..ce6ff48141f7ebb89558f85ef24b72e6a4eab3e4:/base.plp diff --git a/base.plp b/base.plp index f1ed06c..226a4cd 100644 --- a/base.plp +++ b/base.plp @@ -15,20 +15,53 @@ Html({ my @cols = (2, 6, 8, 9, 10, 12, 16, 18, 20); my @morecols = (2 .. 6, 8, 9, 10, 12, 16, 18, 20, 24, 32, 36, 64); my @char = (0..9, 'A'..'Z', 'a'..'z'); +my %RADIXNAME = ( + 2 => 'binary', + 3 => 'ternary', + #4 => 'quaternary', + #5 => 'quinary', + 6 => 'senary', + 8 => 'octal', + #9 => 'nonary', + 10 => 'decimal', + 12 => 'dozenal', # duodecimal + 16 => 'hexadecimal', + 20 => 'vigesimal', + #36 => 'double-senary', + 60 => 'sexagesimal', + #64 => 'double-octal', +); :>

Number bases

Radix economy

- +
<: +sub showcolhead { + print ''; + my @spans; + $spans[ $_ > 10 ]++ for @_; + print "" for @spans; + print ''; +} + sub radix_economy { my ($val, $radix) = @_; return $radix * int(log($val) / log($radix) + 1); } use List::Util 'sum'; -print '
'; + for (@_) { + print '', $_ < 36 ? $char[$_] : $char[35].'+'.$char[$_ - 35]; + print " ($_)" for join(', ', + $RADIXNAME{$_} // (), + $_ >= 10 ? "base$_" : (), + ) || (); + } + say '
'; -print '', $_ for @morecols; + +showcolhead(@morecols); + for my $max (100, 255, 1024) { print '
⍳', $max; for my $radix (@morecols) { @@ -39,11 +72,8 @@ for my $max (100, 255, 1024) { :>

Reciprocal fractions (n⁻¹)

- +
<: -print '' if $n % 8 == 1; print ''; print '
'; -print '', $_ for @cols; - use Math::BigFloat; my $count = 40; @@ -80,7 +110,10 @@ ADD_DIGITS: printf '%s', $class && qq( class="$class"), $out; } +showcolhead(@cols); + for my $n (2 .. $count) { + print '
', $n; for my $radix (@cols) { @@ -88,6 +121,7 @@ for my $n (2 .. $count) { Math::BigFloat->accuracy($accuracy); showfrac(scalar Math::BigFloat->new(1)->bdiv($n, $accuracy+1), $radix); } + say ''; } :>
@@ -95,7 +129,7 @@ for my $n (2 .. $count) {

Duplication (2ⁿ)

- +
<: sub showint { my ($int, $radix) = @_; @@ -109,16 +143,19 @@ sub showint { } @cols = grep { not $_ ~~ [2,8,16] } @cols, 36; -print ''; + next; + } print ''; print '
'; -print '', $_ for @cols; +showcolhead(@cols); -for my $n (3 .. 16, 18, 20, 24, 30, 32, 36, 40, 48, 50, 60, 64) { +for my $n (0, 3 .. 16, 0, 18, 20, 24, 30, 32, 36, 40, 48, 50, 60, 64) { + if (!$n) { + print '
', $n; for my $radix (@cols) { print '', showint(2 ** $n, $radix); } - print '', { + say '', { 4 => 'nibble', 8 => 'octet', 16 => '2o',