MATLAB中的大数乘法

MATLAB中的大数乘法,matlab,Matlab,我有一个纯粹出于好奇的问题。如何在MATLAB中实现大数乘法?是Karatsuba、Toom-3、Fürer还是完全不同的东西?没有内置的BigInteger类,如果这是您的意思的话。您可以使用定点工具箱,也可以导入相关的java/.NET类 默认情况下,数字以IEEE双精度浮点格式表示。如果您需要更多精度数字,如果您对计算算法感兴趣,例如139676498390139139676498390*8745566554641239676498390676498390,您可以尝试使用此,然后就是这样:

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

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


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

如果您需要更多精度数字,如果您对计算算法感兴趣,例如
139676498390139139676498390*8745566554641239676498390676498390
,您可以尝试使用此,然后就是这样:

  • 这两个数字在中都转换为
    double
  • 因此,表示不准确,因为
    双精度
    只能准确表示最多(~
    10^15
    ,而您的数字顺序为
    10^35
  • 乘法是使用双精度浮点数执行的,因此也是近似的
请看以下示例代码:

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

ans =

139676498390139141600015724509659136

这显然不是您指定给
a
的值-只有前16位匹配。

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

我的目标不是准确性,而是计算速度。我在MATLAB Central中发现了一个可能和您的问题有关的问题…谢谢!这当然很有趣。现在我知道我可以使用符号工具箱来进行这种操作。不幸的是,它没有说明它是如何实现的,或者使用了什么算法。无论如何,谢谢你的评论!如果你的目标不是准确性,而是速度,那么你的大数字是什么?它们可以用双精度表示吗?比如1e254?什么是大的?你需要任意精度的算术吗?你说你想要大数乘法,但你说你不在乎准确性。那是什么意思?。这与您需要的有什么不同?假设我只对算法感兴趣,当我尝试计算类似的东西时,会用到算法:139676498390139139676498390676498390*8745566554641239676498390676498390符号工具包呢?