【发布时间】:2012-09-24 16:44:24
【问题描述】:
我知道,加法运算比乘法运算更简单。但是123456 * 3和123456 + 123456 + 123456的执行时间会有区别吗?
乘法究竟是如何工作的?
乘法算法在不同的编程语言中是否有所不同?
乘法在低级(即汇编代码)上的表现如何?
【问题讨论】:
-
整数还是浮点数?它有所作为。
标签: theory multiplication
我知道,加法运算比乘法运算更简单。但是123456 * 3和123456 + 123456 + 123456的执行时间会有区别吗?
乘法究竟是如何工作的?
乘法算法在不同的编程语言中是否有所不同?
乘法在低级(即汇编代码)上的表现如何?
【问题讨论】:
标签: theory multiplication
在 x86 汇编语言中,加法和乘法运算如下所示:
添加[操作数1],[操作数2] 其中操作数 1 可以是寄存器,操作数 2 可以是寄存器、常量或内存地址 它需要 1 到 7 个时钟,具体取决于处理器型号和操作数 2 类型
MUL [操作数] ;用于无符号乘法 将累加器寄存器(AL、AX、EAX)的内容与操作数相乘,操作数可以是寄存器或内存地址。同样,根据操作数的类型和处理器型号,它需要 12-38 个时钟 还有一个版本的 MUL 可以进行有符号乘法。
这是核心汇编语言,没有像 SSE 等现代 SIMD 扩展。如上所述,实际速度取决于编译器优化。
智能编译器很可能会将您的 123456 + 123456 + 123456 替换为 3*123456
【讨论】:
过早的优化是万恶之源:)
你给编译器的不是你在优化步骤后得到的,所以虽然理论上加法更快,但在现实世界条件下你永远无法确定结果是什么(更不用说当你考虑到SSE 或编译器可能使用的其他处理器指令)。
【讨论】: