X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/3421b7f94214deb6c8807e34cdd8cb11eb33906b..3245065392594e36c11044f0a52afd1b652179cb:/base.plp
diff --git a/base.plp b/base.plp
index 3a89a53..a68a71f 100644
--- a/base.plp
+++ b/base.plp
@@ -2,7 +2,7 @@
Html({
title => 'number bases',
- version => 'v1.1',
+ version => '1.2',
description => [
"Cheat sheets summarising various software programs and standards.",
],
@@ -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 '';
+ for (@_) {
+ print ' | ', $_ < 36 ? $char[$_] : $char[35].'+'.$char[$_ - 35];
+ print " ($_)" for join(', ',
+ $RADIXNAME{$_} // (),
+ $_ >= 10 ? "base$_" : (),
+ ) || ();
+ }
+ say ' |
';
+}
+
sub radix_economy {
my ($val, $radix) = @_;
return $radix * int(log($val) / log($radix) + 1);
}
use List::Util 'sum';
-print '';
-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 '';
-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 ' |
' if $n % 8 == 1;
print '';
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,9 +129,8 @@ for my $n (2 .. $count) {
Duplication (2â¿)
-
+
<:
-use 5.010;
sub showint {
my ($int, $radix) = @_;
my @digits;
@@ -110,16 +143,19 @@ sub showint {
}
@cols = grep { not $_ ~~ [2,8,16] } @cols, 36;
-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 ' |
';
+ next;
+ }
print '';
print '', $n;
for my $radix (@cols) {
print ' | ', showint(2 ** $n, $radix);
}
- print ' | ', {
+ say ' | ', {
4 => 'nibble',
8 => 'octet',
16 => '2o',
|