c - C 是否在内部使用 Karatsuba 算法将两个整数相乘?

标签 c algorithm multiplication

当 C 将两个 n 位 整数相乘时,它在内部使用普通的 O(n^2) 乘法算法,还是使用 Karatsuba 的变体 O(n^log_2(3)) 乘法算法 ?

最佳答案

没有。 Karatsuba 算法的“簿记”开销太高太复杂。它会比乘法器占用更多的硅,即使它要在机器字级别上实现收支平衡的递归深度。对于足够大的 n,硬件加密加速器或 FPGA 可能值得。即便如此,收支平衡点可能太高而无法满足加密需求。天下没有免费的午餐。

另一方面,我们可以查看 GMP library 中的 gmp-mparam.h 文件,它定义了 阈值 值,在该值处渐近更快的算法实际上开始得到返回。 'Karatsuba' 是更通用的 Toom-Cook 算法的 2x2 情况。即使在像 Broadwell 和 Skylake CPU 这样的怪物上,阈值也在 28 个“字”或 1792 位左右。这是由于(递归地)将 3 个结果与进位传播加在一起的开销。随着乘法指令吞吐量的增加,这些阈值将不断提高。

关于c - C 是否在内部使用 Karatsuba 算法将两个整数相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42202738/

相关文章:

在apple darwin中创建GNU C环境

c - 为什么位为 01110011 的字节不会变成字符 `s` ?

c++ - 带有 vector 的简单二维碰撞检测

algorithm - 一个循环的运行时间直到 i*i <= n

javascript - 创建乘法输入并继续除法

r - 如何快速执行类似乘法的矩阵运算?

c# - 在 C# 中将 double 乘以 100 会导致意想不到的答案

c - 为什么我可以单独打印每个字符,但不能整体打印?

c++ - 自修改算法?

c++ - C和C++相对于一元算术运算符存在差异的原因是什么 +