diff options
author | Marvin Borner | 2024-07-27 20:28:30 +0200 |
---|---|---|
committer | Marvin Borner | 2024-07-27 20:28:30 +0200 |
commit | 1d20e2a89a9dbae670d813d90e50f44b3f1dbd91 (patch) | |
tree | 11a017a3aec1e9c8d060a580ff9848bbf9f79647 | |
parent | fce366dd702be5ed333363ab6a4808363871c41e (diff) |
Fixed truly crazy bug in some rare cases
-rw-r--r-- | std/Number/Ternary.bruijn | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/std/Number/Ternary.bruijn b/std/Number/Ternary.bruijn index fcc6ca6..5392b63 100644 --- a/std/Number/Ternary.bruijn +++ b/std/Number/Ternary.bruijn @@ -384,12 +384,16 @@ div² [z [[[[rec]]]] (+0) 0 0] ⧗ Number → Number # also counts leading 0s log₃* [0 (+0) inc inc inc] ⧗ Number → Number +:test (log₃* (+42)) ((+5)) +:test (log₃* [[[[1 (0 (0 (0 (0 3))))]]]]) ((+5)) + # ceiled integer log₃ by counting number of trits log₃ log₃* ∘ strip ⧗ Number → Number :test (log₃ (+0)) ((+0)) :test (log₃ (+5)) ((+3)) :test (log₃ (+42)) ((+5)) +:test (log₃ [[[[1 (0 (0 (0 (0 3))))]]]]) ((+1)) # amount of non-zero trits hamming-weight [0 (+0) inc inc [0]] ⧗ Number → Number @@ -427,7 +431,7 @@ force [[[0 <? 2 pad trim] (log₃* 0)]] ⧗ Number → Number → Number # lshifts after concat, given trit count # as introduced by Douglas W. Jones double-shift [[[left : right]]] ⧗ Number → Number → Number → (Pair Number Number) - trim [(log₃ 0) >? 3 ←0 0] + trim [(log₃* 0) >? 3 ←0 0] left trim ((nth-trit --2 0) ↑ 1) right trim ↑⁰0 @@ -435,7 +439,7 @@ double-shift [[[left : right]]] ⧗ Number → Number → Number → (Pair Numbe # technique by Douglas W. Jones # algorithm originally intended for fixed-width numbers (=> ugly hacks) # TODO: remove the final `huh` correction step (probably some off-by-one bug?) -quot-rem [[[[[z [[[[rec]]]] 1 (+0) 4]]] <?0 (max (log₃ 1) (log₃ 0)) 0]] ⧗ Number → Number → (Pair Number Number) +quot-rem [[[[[z [[[[rec]]]] 1 (+0) 4]]] <?0 (max (log₃* 1) (log₃* 0)) 0]] ⧗ Number → Number → (Pair Number Number) rec =?2 huh (double-shift 5 1 0 [[compare-case eq gt lt 1 (+0)]]) huh (>?1 ⋀? 6) ⋁? (<?1 ⋀? \6) (--0 : (1 + 7)) (0 : 1) eq 5 --4 1 0 |