为什么不长期100%准确?

mim*_*pus 0 c++ linux long-integer

我在Linux上尝试使用time -p命令,并编写了一些代码来浪费CPU周期:

#include <iostream>

using namespace std;

int main() {
 long int c;

 long int ss;

 for(c = 0;c < 10000000;c++) {
  ss += c*c;
 }

 cout<<ss<<endl;

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

然而,在运行几次之后我发现了一些有趣的东西:

me@octopus:~/Desktop> ./test
1292030741067648912
me@octopus:~/Desktop> ./test
1292030742538841328
me@octopus:~/Desktop> ./test
1292030742228685600
me@octopus:~/Desktop> ./test
1292030740402651312
me@octopus:~/Desktop> ./test
1292030740207543344
me@octopus:~/Desktop> ./test
1292030740346553856
me@octopus:~/Desktop> ./test
1292030741629275040
me@octopus:~/Desktop> ./test
1292030740397307072
me@octopus:~/Desktop> ./test
1292030742928964784
me@octopus:~/Desktop> ./test
1292030741780094096
Run Code Online (Sandbox Code Playgroud)

我不仅每次都得到相同的数字,正如我所料,我甚至没有得到相同的数字.这里发生了什么?

com*_*ial 10

您尚未将ss初始化为零,因此其初始值未定义.你需要:

long int ss = 0;
Run Code Online (Sandbox Code Playgroud)

  • Nit pick:它不是随机的.随机建议您可以在重复运行程序时依赖于获取不同的值.这是未定义的. (7认同)

jua*_*nza 5

你还没有初始化ss.初始值可以是任何值.

long int ss = 0;
Run Code Online (Sandbox Code Playgroud)