简介
我正在研究一个编码实践问题,人们在其中发布执行时间,以查看谁获得了最佳性能。我写了一个递归函数来计算大数(3位数字)的模幂。
出了什么问题?
我意识到,当我不使用大括号时,我将获得更快的执行时间。我多次测试该发现,并始终得到相同的结果。
代码1
#include <iostream>
using namespace std;
int modExp(int a, int b, int c){
if(b==0)
return 1;
return (a*modExp(a,b-1,c))%c;
}
int main()
{
int A = 450;
int B = 768;
int C = 517;
int result = modExp(A,B,C);
cout << "Result is: " << result << endl;
return 0;
}
代码1的执行时间
代码2
#include <iostream>
using namespace std;
int modExp(int a, int b, int c){
if(b==0){
return 1;
}
return (a*modExp(a,b-1,c))%c;
}
int main()
{
int A = 450;
int B = 768;
int C = 517;
int result = modExp(A,B,C);
cout << "Result is: " << result << endl;
return 0;
}
代码2的执行时间
我想怎么回事:
尽管执行时间用3个有效数字表示,但代码1似乎比代码2快两倍,我认为这只是一个四舍五入的问题。没有大括号的执行时间大概是0.001465s,当我使用大括号时,它引起足够的延迟,导致执行时间四舍五入为0.002s。
是否可以增加执行时间的有效位数? 我的假设正确吗?为什么您认为造成延迟?
答案 0 :(得分:4)
您从一次运行的可执行文件中看到了统计噪音。这两个可执行文件对于此输入将是相同的(编译器理解为它们在逻辑上是等效的,并相应地产生输出),并且如果您将它们运行数千或数百万次并取平均值,您将看到相同的执行时间。
确实,有时语法上的细微差异可能会具有微妙的语义,因此最终会产生不同的性能,但是使用可选的范围括号并不是这种情况之一。