32 位的比较比 64 位的比较快吗?
我正在查看这个文件 http://www.netlib.org/fdlibm/s_cos.c
他们有这段代码
/* |x| ~< pi/4 */
ix &= 0x7fffffff;
if(ix <= 0x3fe921fb) return __kernel_cos(x,z);
我理解第一行,计算x的绝对值。但为什么比较如此复杂?通过比较前 32 位而不是全部 64 位,性能是否有任何改进?我可以写吗
long unsigned int ix = *(long unsigned int * (&x));
ix &= 0x7fffffffffffffff;
if (ix < 3fe921fb54442d18)
/* What comes next */
并期望在 64 位机器上获得相同的速度性能?虽然我同意这会消耗更多内存。
0x3fe921fb54442d18
是 pi/2。