【问题标题】:Bigger input base for bc?为 bc 提供更大的输入基础?
【发布时间】:2013-05-03 17:57:17
【问题描述】:

我正在寻找一个以 31 为基数的计算器,即我希望输入和输出都以 31 为基数。(我实际上并不关心数字的格式,只是它易于写入。因此,例如 `013456789ABCDEFGHIJKLMNOPQRSTU' 就可以了。)

bc 接缝是小型底座的好选择,您可以定义ibase=x; obase=x。但 ibase 有一个上限——即 16,因为它不想使用比 F 更大的数字。

有什么解决方法吗?或者,也许是一种如何重新编译bc 以支持更大基础的方式?或者,是否有一些替代 bc 至少可以做基本算术(如 +、-、/、*、^)?

【问题讨论】:

    标签: base bc


    【解决方案1】:

    如果您只想做一些计算而不是繁重的数字运算,您可以使用我的计算器Kalkulon 和一个简单的Kalkulon script for big number arithmetic。交互式 Kalkulon 会话如下所示:

    Load("examples/bignum.k")
                        outl[1] = 0
    
    string2Bn("1234567890ABCDEFGHIJKLMNOPQRSTU",31)
                        outl[2] = {587, 938220, 58035, 844882, 441786, 886253, 755598, 800665}
    
    string2Bn("UTSR",31)
                        outl[3] = {922494}
    
    mulBn(outl[2], outl[3])
                        outl[4] = {542, 369480, 374217, 718688, 983253, 751847, 772017, 360020, 658510}
    
    printBn(out)
    542369480374217718688983253751847772017360020658510
                        outl[5] = 51
    
    Bn2string(outl[4],31)
                        outl[6] = "121UOIC5UEHLRAUOIC5UOIC5UOIC5UNHB64"
    
    divBn(outl[4], outl[2])
                        outl[7] = {922494}
    
    Bn2string(out,31)
                        outl[8] = "UTSR"
    

    我只是好奇:为什么要以 31 为底进行计算?

    【讨论】:

    • 谢谢,我从我的大学得到了一个具有类似功能的简单程序。问题是语法太复杂了。我需要计算很多计算并考虑它们,这有点困难,如果你必须编写复杂的表达式,例如:Bn2string(mulBn(string2Bn("HI"),string2Bn("HELLO")))。跨度>
    • 而且,原因是我正在为拼图游戏创建拼图。有点 31 是一个很好的数字,因为我可以使用所有字母作为数字(我们添加了一些特定的捷克字母来达到 31),其次它是素数。所以这种计算器的另一个动机是用 p 进数计算一些东西,或者至少更好地抓住它们。
    • 对于 p-adic 算术来说,拥有类似于 bc(即基本上是 bc 克隆)的东西真的很棒。 (有关 p-adic 数的一些信息,请参阅en.wikipedia.org/wiki/P-adic_number.
    • @Iacob 这很有趣!我必须承认 Kalkulon 不是正确的工具,但至少可以稍微简化语法base=31, mul(x,y)=Bn2string(mulBn(string2Bn(x, base), string2Bn(y,base)), base)add(x,y)=Bn2string(addBn(string2Bn(x, base), string2Bn(y,base)), base),所以add(mul("HI", "HELLO"), "GOOD") = "9S6UAIB"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2014-06-10
    相关资源
    最近更新 更多