如何在Delphi中编写高级计算器而不受浮点类型的限制?

时间:2012-06-20 17:13:36

标签: delphi delphi-7

您好我可以在Windows 7的计算器中计算17^1000,它看起来像

1.2121254521552524e+123(我认为这不正确)

我怎样才能在delphi中编写它,我想用例如1.2121254521552524e+123 mod 181.2121254521552524e+123 mod 100

另一个例子:17 mod 5 = 2

如果有人帮助我怎么写呢?

1 个答案:

答案 0 :(得分:3)

您需要使用某种扩展精度类型。这样的类型不是原始类型,你需要使用现有的类型或编写自己的类型(这将是一项大量的工作,以及重新发明轮子的经典案例)。 Java可能是一种更好的语言,因为它的系统库包括BigInteger和BigDecimal类,它们可以处理你需要的功能。

编辑:以下是一些提供大整数和高精度浮点运算的delphi库:http://www.delphiforfun.org/programs/Library/big_integers.htm

也就是说,如果您发现自己无法使用Windows计算器来完成您正在寻找的内容,而您只需要一两件事,请考虑使用更强大的在线服务,例如WolframAlpha。

此外,如果您仍然没有答案:

17^1000 mod 18  == 1
17^1000 mod 100 == 1

用于计算这些数字的算法很简单,不需要大整数支持。考虑以下伪代码:

modular_exponentiation (base, exponent, modulus):
    let value = 1
    let c_exponent = 0
    for c_exponent less than exponent:
        let value = value * base
        if value greater than or equal to modulus:
            let value = (value) mod (modulus)
        increment c_exponent
    value.