为了它的价值,使用SSE指令
mulsd
NaN
几乎和常数一样快
4.0
(由公平的骰子选择,保证是随机的)。
for (unsigned i = 0; i < 2000000000; i++)
{
double j = doubleValue * i;
}
生成带有叮当声的机器代码(在循环内)(我假设.NET虚拟机也可以使用SSE指令):
movsd -16(%rbp), %xmm0 ; gets the constant (NaN or 4.0) into xmm0
movl -20(%rbp), %eax ; puts i into a register
cvtsi2sdq %rax, %xmm1 ; converts i to a double and puts it in xmm1
mulsd %xmm0, %xmm1 ; multiplies xmm0 (the constant) with xmm1 (i)
movsd %xmm1, -32(%rbp) ; puts the result somewhere on the stack
经过20亿次迭代
南
(由C宏定义)
NAN
从
<math.h>
较少的
在我的i7上执行秒数。这种差异可能是由任务调度程序造成的。
公平地说,他们也一样快。