kap*_*pil 5 algorithm multiplication division subtraction addition
我们(人)花费更多的时间来乘法,加法,除法和减去两个大数而不是两个小数.
计算机是否需要花费更多时间来5 * 2表示51234 * 987654或者是否在相同的时间内完成操作?
两个大于处理器字长的数字(例如两个128位数)怎么办?
我看到了文章https://en.wikipedia.org/wiki/Multiplication_algorithm
假设您主要对x86系列感兴趣,那么乘法所用的时间取决于操作数.这是在上个世纪 - 处理器达到并包括80486.从Pentium开始,imul一直采取与其输入无关的多个周期.
分部一直是并且仍然是一个需要多个周期的操作,这些周期确实取决于输入,IIRC主要取决于结果的大小.
如果您还考虑"非常规输入",例如非正规,浮点指令通常可能需要不同的时间.
取决于输入类型.对于CPU本身支持的原语,例如64位CPU上64位数的乘法:否,这些原子操作总是花费相同的时间.对于非原始数据类型,如Java BigInteger或其他语言中的类似库类:是的,这些不再是原子操作,因此根据操作数的大小,所需的时间量不同.
由于一个简单的原因,基元的乘法总是占用相同的时间:操作是在没有任何条件执行的情况下构建硬连线,并且总是在64位CPU上迭代所有 64位,无论输入是否只有5位长或占用所有64位.同样适用于任何其他位数的体系结构.
编辑:
正如@nwellnhof所说:一些指令实际上确实包含分支,例如浮点运算.通常这些指令基于微码,因此在较窄的意义上不能算作原子指令.