我想了解C++中用于计算乘法的方法是什么。是否使用传统的竖式乘法算法?还是使用Fürer算法或Toom-Cook算法等其他算法?
我之所以想知道,是因为我需要计算非常大的数字并且需要高效率。因此,传统的竖式乘法算法
那么C++中使用的是哪种乘法算法呢?
我之所以想知道,是因为我需要计算非常大的数字并且需要高效率。因此,传统的竖式乘法算法
O(n^2)
可能效率过低,我需要采用其他乘法算法。那么C++中使用的是哪种乘法算法呢?
你好像漏掉了几个关键点:
要获得大数(任意精度)算术,您需要自己实现或使用库。 (例如GMP)与Java和C#(等等)不同,C++没有用于任意精度算术的库。
所有那些花哨的算法:
O(n^1.585)
< O(n^1.465)
~ O(n log(n))
仅适用于在大数库中实现的大数算术。处理器用于其原生算术运算的内容有点无关紧要,因为它通常是常数时间。
无论如何,我不建议尝试实现大数库。我以前做过这个,很费事(特别是数学部分)。所以最好使用库。
int
,尽管那应该很少见)而被针对的架构不支持,并且代之以将算术操作实现为调用运行时库。考虑128位整数或可能在32位系统上使用的64位整数。另外,过去有许多芯片没有浮点运算单元(FPU)。 - user395760这完全取决于所使用的库和编译器。
这是在硬件中执行的。同样的道理,庞大的数字也行不通。C++在64位硬件中可以表示的最大数字是18446744073709551616。如果需要更大的数字,则需要使用任意精度库。
普通的C++使用CPU多指令(或者如果你的CPU没有这样的指令,则使用基于位移和加法的学校式乘法)。
如果您需要快速计算大数的乘积,我建议您查看GMP(http://gmplib.org),并使用gmpxx.h中的C++接口。
如果你在编程中需要处理大量的数字,那么C++标准整数乘法将不再适用,你应该使用提供任意精度乘法的库,比如GMP http://gmplib.org/。
此外,在编写应用程序之前,你不必担心性能(过早优化)。这些乘法运算将会很快,而且很可能你软件中的许多其他组件会导致更多的减速。
1e100*1e100
运算。这意味着将100个有效位数相乘只需要不到一百万分之一秒的时间。要把它放入上下文中,可观测宇宙中只有约10^80个原子。