【问题标题】:How to implement bignum in Scheme given the following grammar?给定以下语法,如何在 Scheme 中实现 bignum?
【发布时间】:2012-03-01 16:34:22
【问题描述】:

我认为 Scheme 有一个内置类型 Bignum 用于处理任意大的数字,但如果我想自己实现它,我该怎么做呢?

如果我没记错的话,它的语法如下: |n| = () 当 n=0 时 |n| = (r . |q|) 其中 n=qN+r, 0

N = base
r = remainder
q = quotient

例如当基数 N=16 时,|33| = (1 2) 其中 1 是余数,2 是商。

PS:使用 bignum 实现我怎么能转到下一个数字(后继)和前一个数字(前任),例如 successor |n| = |n+1|predecessor |n+1| = |n|

【问题讨论】:

  • 您的语法不正确,尽管它指向了正确的方向。正确回答您的问题需要一本书,而不是 Stack Overflow 上的一三段。大整数算法的规范描述在 Knuth 的 AoCPv2 中。或者,如果您愿意,我去年夏天在我的博客上做了一个由七部分组成的系列(使用 Scheme 中的代码);请参阅我的个人资料以获取网址。

标签: lisp scheme racket bignum


【解决方案1】:

你很幸运。这个问题很经典。 Andre van Meulebrock 写了一系列关于 bignums(表示和相关算法)的优秀文章。这篇文章包含可运行的 Scheme 代码,所以请尝试他的代码。

浏览 MacTech 的档案:

http://www.mactech.com/articles/mactech/Vol.08/08.03/BigNums/index.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    相关资源
    最近更新 更多