计算机如何评估大量数字?

Sam*_*Sam 11 math data-structures

如果我在Wolfram Alpha中输入一个值,例如1234567 ^ 98787878,它可以为我提供一些细节.这包括十进制近似,总长度,最后一位数等.您如何评估这么大的数字?据我所知,编程语言必须有一个特殊的数据类型才能存储数字,更不用说将它添加到其他东西了.虽然我可以看到人们如何接近两个非常大的数字,我看不出有多大的数字被评估.

可以通过重复添加来计算10 ^ 2.然而,诸如上述示例之类的数字将需要巨大的循环.有人可以解释如何评估这么大的数字吗?另外,有人如何创建自定义大型数据类型以支持C#中的大数字?

Dmi*_*nko 11

嗯,这很容易,你可以自己完成

  1. 可通过对数获得的位数:

    以来 A^B = 10 ^ (B * log(A, 10))

    我们可以(A = 1234567; B = 98787878)在我们的案例中计算出来

    B * log(A, 10) = 98787878 * log(1234567, 10) = 601767807.4709646...

    integer part + 1 (601767807 + 1 = 601767808)是位数

  2. 首先,说,5,数字可通过以下方式得到的对数为好; 现在我们应该分析一小部分

    B * log(A, 10) = 98787878 * log(1234567, 10) = 601767807.4709646...

    f = 0.4709646...

    第一个数字是10^f(小数点删除)= 29577 ...

  3. 最后,比方说,5,数字可以作为相应获得剩余:

    最后五位= A^B rem 10^5

    A rem 10^5 = 1234567 rem 10^5 = `34567

    A ^ B rem 10 ^ 5 **=**((A rem 10 ^ 5)^ B)rem 10 ^ 5 **=** (34567 ^ 98787878)rem 10 ^ 5 =45009`

    最后五位数是45009

    您可能会发现BigInteger.ModPow(C#)在这里非常有用

最后

1234567 ^ 98787878 = 29577 ... 45009(601767808位数)