depth: X x Y required memory:
1: 4 x 4 == 16 _b
2: 16 x 16 == 256 _b
3: 64 x 64 == 4 Kb
4: 256 x 256 == 64 Kb
5: 1024 x 1024 == 1 Mb
6: 4096 x 4096 == 16 Mb
7: 16384 x 16384 == 256 Mb
8: 65536 x 65536 == 4 Gb
9: 262144 x 262144 == 64 Gb
10: 1048576 x 1048576 == 1 Tb
11: 4194304 x 4194304 == 16 Tb
12: 16777216 x 16777216 == 256 Tb
13: 67108864 x 67108864 == 4 Pb
14: 268435456 x 268435456 == 64 Pb
15: 1073741824 x 1073741824 == 1 Eb
16: 4294967296 x 4294967296 == 16 Eb
17: 17179869184 x 17179869184 == 256 Eb
18: 68719476736 x 68719476736 == 4 Zb
19: 274877906944 x 274877906944 == 64 Zb
20: 1099511627776 x 1099511627776 == 1 Yb
21: 4398046511104 x 4398046511104 == 16 Yb
22: 17592186044416 x 17592186044416 == 256 Yb
23: 70368744177664 x 70368744177664 == 4 2^90b
24: 281474976710656 x 281474976710656 == 64 2^90b
25: 1125899906842624 x 1125899906842624 == 1 2^100b
26: 4503599627370496 x 4503599627370496 == 16 2^100b
27: 18014398509481984 x 18014398509481984 == 256 2^100b
28: 72057594037927936 x 72057594037927936 == 4 2^110b
29: 288230376151711740 x 288230376151711740 == 64 2^110b
30: 1152921504606847000 x 1152921504606847000 == 1 2^120b
31: 4611686018427387900 x 4611686018427387900 == 16 2^120b
32: 18446744073709552000 x 18446744073709552000 == 256 2^120b
####
if( X == Y ) {
return depth;
}
elsif ( ( X,Y ) is in a 4x4 block on the major diagonal ) {
return $depth - 1;
}
else {
## Move the 4x4 block to the origin and treat as for depth -1
X %= 4;
Y %= 4;
depth--;
recurse;
}
####
#! perl -slw
use strict;
$|++;
our $DEPTH ||= 3;
sub fract2D {
use integer;
my( $x, $y, $depth ) = @_;
if( $x < 16 and $y < ) { ## A block on the major diagonal
return $x == $y ? $depth : $depth -1;
}
elsif( $depth > 1 ) {
return fract2D( $x % 4**$depth, $y % 4**$depth, $depth -1 );
}
else {
return fract2D( $x % 4**$depth, $y % 4**$depth, $depth );
}
}
for my $depth ( $DEPTH ) {
for my $y ( 0 .. 4**$depth-1 ) {
my $c = 0;
for my $x ( 0 .. 4 ** $depth -1 ) {
printf +( ( ++$c % 4 ) == 0 ? " %2d " : " %2d" ),
fract2D( $x, $y, $depth );
}
print +( $y % 4 ) == 3 ? "\n" : '';
}
print '';
}