[5/14]
I do not recommend looking at the fourth-order formula for too long, it might start looking back at you. Here are the updated timings, all in vanilla python.
- The u64 overflow R(10^10) is too small for fourth-order S-groups to pay off and the third-order timing >>76 of under 100 microseconds remains as reference.
- The u128 overflow R(10^20) is computed in under one millisecond.
- The u256 overflow R(10^39) is computed in 16 milliseconds.
- The first integer k for which R(10^k) overflows an u512 is k=78. The value of R(10^78) is computed in under 5 seconds.
$ python3 -m timeit -s 'import flake.hofs as mod' 'mod.work_layers (100000000000000000000)'
1000 loops, best of 3: 945 usec per loop
$ python3 -m timeit -s 'import flake.hofs as mod' 'mod.work_layers (1000000000000000000000000000000000000000)'
100 loops, best of 3: 15.6 msec per loop
$ python3 -m timeit -s 'import flake.hofs as mod' 'mod.work_layers (1000000000000000000000000000000000000000000000000000000000000000000000000000000)'
10 loops, best of 3: 4.79 sec per loop
R(10^78) is the appropriate value for comparing implementations with this runtime order of growth. Here is the k<=120 table in >>38 format. This is most likely the last such table I'll post in full so please excuse the length. Consider it raw research data.