10

我有一个纯粹出于好奇的问题。如何在 MATLAB 中实现大数的乘法?是 Karatsuba、Toom-3、Fürer 还是完全不同的东西?

4

4 回答 4

5

例如,如果您对计算算法感兴趣139676498390139139676498390676498390*8745566554641239676498390676498390,那么会发生以下情况:

  • 两个数字都转换为doubleIEEE®标准 754
  • 因此,表示是不准确的,因为doubles只能准确表示高达2^53-1(检查bitmax函数文档)的整数(~ 10^15,而你的数字是 的顺序10^35)。
  • 乘法是使用双精度浮点数执行的,因此也是近似的

看看这个示例代码:

>> a=139676498390139139676498390676498390;
>> num2str(a)

ans =

139676498390139141600015724509659136

这显然不完全是您分配的值a- 只有前 16 位数字匹配。

于 2012-10-29T10:30:14.030 回答
3

没有内置BigInteger类,如果这就是你的意思。您可以使用定点工具箱,也可以导入相关的 java/.NET 类。

默认情况下,数字以 IEEE 双精度浮点格式表示。

于 2012-09-21T11:59:34.527 回答
3

添加到答案中,如果您需要更多位数的准确性,可以尝试使用此fex 文件

于 2012-09-21T15:35:16.750 回答
0

如果您的数字很大,但您不需要大量有效数字。每次乘法都可以乘以一个小数,例如 $10^-1$。跟踪乘法次数 $N$ 并获得一个以 $10^{-N}$ 表示的值。这可以是一个临时的解决方法。

于 2014-06-17T13:32:43.580 回答