摆弄gforth
版本的BASE
表明,BASE
可用于超过大多数语言允许的值。例如,这会以十进制打印数字 0ABC(base 15950),反之亦然:
gforth -e '15950 base ! ABC decimal . cr bye'
gforth -e '2544200462 15950 base ! . cr bye'
输出:
2544200462
ABC
无需编写其他 Forth 字样,到的有意义转换的默认Gforth和 ANSI Forth BASE
上限是多少? 来自不同基数?
(暂时忽略将现有字符集映射到描述某些任意基数的复杂性,或者想象一个无限的分形字符集,当需要新字符时,它会增加30-150度的衬线。)
答案 0 :(得分:3)
根据standard,它是
BASE
( - a-addr)
a-addr是包含当前数字转换基数{{2 ... 36}}的单元格的地址。
所以它是2..36。
这是有道理的,不是吗?
答案 1 :(得分:0)
Gforth v0.7.2 + dfsg1-1.1 中的BASE
的最大值,(用于将ABC
转换为数字并再次返回),似乎意外地大 960,383,882 。通过比较Gforth的输出与calc
(任意精度计算器,可以在大约一秒钟内输出(27^3)!
的所有76,976位数)来找到并测试该数字,并在下面使用{{ 1}}被认为是正确的:
calc
测试# Output Gforth calculation of (12*b^2)+(11*b^1)+(10*b^0) to
# base 10 and inversely back to base b.
b=960383882 n=ABC ; bd=$(gforth -e $b' base ! '$n' decimal . cr bye')
gforth -e "${bd} dup . cr $b"' base ! . cr bye'
calc "10*($b^2)+11*($b^1)+12*($b^0)" | xargs echo
9223372018618121954
ABC
9223372018618121954
# It fails here:
b=960383883 n=ABC ; bd=$(gforth -e $b' base ! '$n' decimal . cr bye')
gforth -e "${bd} dup . cr $b"' base ! . cr bye'
calc "10*($b^2)+11*($b^1)+12*($b^0)" | xargs echo
-9223372035883752001
-A8f
9223372037825799615
的上限,(即上面代码中的$n
)等待...