计算机是否需要更多的时间来乘以,除,减,添加两个大数而不是更小的数

时间:2016-03-08 13:26:32

标签: algorithm division multiplication addition subtraction

我们(人)花费更多时间来乘法,加法,除法和减去两个大数而不是两个小数。

计算机是否需要更多时间来乘以5 * 2而不是说51234 * 987654,或者操作是否在相同的时间内完成?

两个大于处理器字长的数字(例如两个128位数)怎么办?

我看到了文章https://en.wikipedia.org/wiki/Multiplication_algorithm

2 个答案:

答案 0 :(得分:8)

假设您主要对x86系列感兴趣,那么乘法所用的时间取决于操作数。那是在上个世纪 - 处理器达到并包括80486.从奔腾开始,imul总是采取与其输入无关的多个周期。

分区一直是并且仍然是一个需要多次循环 依赖于输入的操作,IIRC主要取决于结果的大小。

如果您还考虑了奇怪的输入,那么浮点指令通常会花费不同的时间。比如denormals。

答案 1 :(得分:6)

取决于输入类型。对于CPU本身支持的原语,例如64位CPU上64位数的乘法:否,这些原子操作总是花费相同的时间。对于非原始数据类型,例如Java BigInteger或其他语言中的类似库类:是的,这些不再是原子操作,因此所需的时间量不同,具体取决于操作数的大小。

由于一个简单的原因,基元的乘法总是需要相同的时间:操作是在没有任何条件执行的情况下构建硬连线的,并且总是在64位CPU上迭代所有 64位,无论是什么输入是仅5位长还是占用所有64位。同样适用于任何其他位数的体系结构。

编辑:
正如@nwellnhof所说:某些指令实际上确实包含分支,例如浮点运算。通常这些指令基于微码,因此不能在较窄的意义上被视为原子指令。