我有一个纯粹出于好奇的问题。如何在 MATLAB 中实现大数的乘法?是 Karatsuba、Toom-3、Fürer 还是完全不同的东西?
问问题
2517 次
4 回答
5
例如,如果您对计算算法感兴趣139676498390139139676498390676498390*8745566554641239676498390676498390
,那么会发生以下情况:
- 两个数字都转换为
double
IEEE®标准 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 回答