gpt4 book ai didi

c++ - 为什么除法比 C++ 中的位移慢?

转载 作者:太空宇宙 更新时间:2023-11-04 15:19:50 25 4
gpt4 key购买 nike

我写了两段代码,一段代码将随机数除以二,另一段代码将同一个随机数右移一次。据我了解,这应该会产生相同的结果。然而,当我对两段代码进行计时时,我始终得到数据表明换档速度更快。这是为什么?

转移代码:

double iterations = atoi(argv[1]) * 1000;
int result = 0;
cout << "Doing " << iterations << " iterations." << endl;
srand(31459);
for(int i=0;i<iterations;i++){
if(i % 2 == 0){
result = result + (rand()>>1);
}else{
result = result - (rand()>>1);
}
}

分割代码:

double iterations = atoi(argv[1]) * 1000;
int result = 0;
cout << "Doing " << iterations << " iterations." << endl;
srand(31459);
for(int i=0;i<iterations;i++){
if(i % 2 == 0){
result = result + (rand() / 2);
}else{
result = result - (rand() / 2);
}
}

时间和结果:

$ time ./divide 1000000; time ./shift 1000000
Doing 1e+09 iterations.

real 0m12.291s
user 0m12.260s
sys 0m0.021s
Doing 1e+09 iterations.

real 0m12.091s
user 0m12.056s
sys 0m0.019s

$ time ./shift 1000000; time ./divide 1000000
Doing 1e+09 iterations.

real 0m12.083s
user 0m12.028s
sys 0m0.035s
Doing 1e+09 iterations.

real 0m12.198s
user 0m12.158s
sys 0m0.028s

附加信息:

  • 编译时我没有使用任何优化
  • 我在 Fedora 20 的虚拟化安装上运行它,内核:3.12.10-300.fc20.x86_64

最佳答案

不是;它在您运行的体系结构上较慢。它几乎总是比较慢,因为位移背后的硬件是微不足道的,而除法则有点像噩梦。在基数 10 中,78358582354 >> 3 或 78358582354/85 哪个更容易?无论输入如何,指令通常都需要相同的时间来执行,在您的情况下,将 /2 转换为 编译器的工作>>1; CPU 只是按照指令执行。

关于c++ - 为什么除法比 C++ 中的位移慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22060963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com