0

摆弄可用于超出大多数语言允许的值的节目gforth版本。例如,这会以十进制打印数字0ABC(基数 15950),反之亦然:BASEBASE

gforth -e '15950 base ! ABC decimal . cr bye'
gforth -e '2544200462 15950 base ! . cr bye'

输出:

2544200462
ABC

在不编写额外的Forth字的情况下,对于不同基数的有意义的转换,默认的 Gforth 和ANSI Forth BASE上限是多少?

(暂时忽略将现有字符集映射到描述任意基数的复杂性,或者想象一个无穷无尽的分形字符集,在需要新字符时添加很少的 30-150 度衬线。)

4

2 回答 2

3

根据标准,它是

根据

(--a-addr)

a-addr 是包含当前数字转换基数 {{2...36}} 的单元格的地址。

所以它是 2..36。

这是有道理的,不是吗?

  • 下限是 2,因为任何小于 2 的数字都是无用的。
  • 上限是 36,因为它允许 0-9 和 AZ 作为数字,不区分大小写。
于 2017-05-17T00:34:26.747 回答
0

BASEGforth v0.7.2+dfsg1-1.1中的最大值(用于转换ABC为数字并再次返回)似乎是出乎意料的大960,383,882。该数字是通过将 Gforth 的输出与(一个任意精度的计算器,它可以在大约一秒calc内输出所有 76,976 位数字)进行比较来找到和测试的,如下所示被认为是正确的:(27^3)!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上面代码中的)的上限测试n=ABC待定...

于 2017-05-17T14:39:59.587 回答