【发布时间】:2020-10-12 02:01:41
【问题描述】:
假设给定整数 N,我需要运行 N 次循环平方根。
在 C++ 中,我可以通过这两种方式来做到这一点——
1)
long long sqrtN = std::sqrt(N);
for (long long i=1; i < sqrtN; i++) {
// some piece of code
}
for (long long i=1; i * i < N; i++) {
// some same piece of code
}
我发现 std::sqrt() 具有 O(logn) 复杂度。 另外,我相信数字的乘法只是一个常数时间的运算。
所以,感觉第二个版本更快。但是,对于非常大的 n 值,第二版中的恒定时间可能很重要。
因此,我不确定哪种方式更有效?
【问题讨论】:
-
为什么不运行基准测试?
-
sqrt可以只是一条汇编指令,例如sqrtsd。 -
@Evg: ...这仍然可能非常昂贵。汇编指令的数量并不是一个很好的性能指标。
-
@DevSolar,同意。关键是
sqrt(n)不一定是O(log n)。 -
还要注意
++i比i++快。 ;-)
标签: c++ loops conditional-statements