(C语言)在循环头内调用sqrt()函数

问题描述 投票:0回答:1

如果我像她一样编写我的主要检查函数。,

for(int i=2; i<=sqrt(n); ++i) {//code} 

每次迭代都会计算 sqrt() 或者 C 编译器是否足够聪明,可以计算一次 sqrt 并存储结果?

  1. 假设 n 为常数
  2. 我知道寄存器可以用于循环变量
  3. 我的是gcc最新版本的编译器

任何建议都会非常有帮助。谢谢你

c performance for-loop compiler-construction c++17
1个回答
0
投票

如果编译器可以可靠地确定

n
确实永远不会改变,则可以通过预先计算来自由地对其进行优化。这个“可靠的机构”可能并不像你想象的那么容易:-)

但是,如果您不想担心它可能不会被检测为恒定的可能性,只需自行执行以下操作:

double sqrn = sqrt(n);
for (int i = 2; i <= sqrn; ++i) {
    //code
} 
© www.soinside.com 2019 - 2024. All rights reserved.