Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中必须对每个i进行cout,使循环工作+;_C++ - Fatal编程技术网

C++ 在C+;中必须对每个i进行cout,使循环工作+;

C++ 在C+;中必须对每个i进行cout,使循环工作+;,c++,C++,我创建此代码是为了计算处理器为学校项目执行此操作所需的时间。问题是我无法在不打印每个a结果的情况下使循环工作,如果我在乘以I时不打印每个a的结果,处理器将跳过循环。在解决了这个问题之后,我想我会尝试对我的CPU进行基准测试,如果我打印每个结果,它可能会影响性能或解决操作所需的时间。我尝试在循环中添加一个if,并且只在I=999999时打印一个if,但它不起作用。有人能帮忙吗 #include <iostream> #include <ctime> using names

我创建此代码是为了计算处理器为学校项目执行此操作所需的时间。问题是我无法在不打印每个a结果的情况下使循环工作,如果我在乘以I时不打印每个a的结果,处理器将跳过循环。在解决了这个问题之后,我想我会尝试对我的CPU进行基准测试,如果我打印每个结果,它可能会影响性能或解决操作所需的时间。我尝试在循环中添加一个if,并且只在I=999999时打印一个if,但它不起作用。有人能帮忙吗

#include <iostream>
#include <ctime>

using namespace std;

int main () {
    int start_s=clock();

    int i;
    for(i=0;i<1000000;i++){
        int a = i*434243;
        if(i = 999999){
            cout<<a;
        }

    }
    int stop_s=clock();
    cout << "time: "<< (stop_s-start_s)/double(CLOCKS_PER_SEC)*1000;

    cout<<"ms";
    system ("pause");
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
int start_s=时钟();
int i;

对于(i=0;i我没有足够的观点来评论,但我认为您的问题来自您的vars类型

你应该这样做:

double time = (double)(stop_s-start_s) * 1000.0 / CLOCKS_PER_SEC;
cout << "time: "<< time;
double time=(double)(停止-启动)*1000.0/时钟/秒;

我没有足够的观点来评论,但我认为你的问题来自你的vars类型

你应该这样做:

double time = (double)(stop_s-start_s) * 1000.0 / CLOCKS_PER_SEC;
cout << "time: "<< time;
double time=(double)(停止-启动)*1000.0/时钟/秒;

如果
if
表达式中有错误。应该是
i==9999999
而不是
i=9999999
如果
if
表达式中有错误。应该是
i==99999999
而不是
i=99999

优化的效果较小,但std::cout是一个昂贵的操作。因此,当您从for循环中删除cout时,所需时间不到1毫秒。但是,由于cout执行了数百万次,因此程序的运行速度非常慢,这是预期的行为。您可以在使用“a”的地方添加更多算术操作,并且可以在for循环外打印结果,以便“a”仍然很重要

int i=0;
int a = 0;
for(;i<1000000;i++){
    a = i*434243;
    a += i;
    //cout<<a<<endl;
}
cout<<a<<" " <<i<<endl;
inti=0;
int a=0;

for(;i优化的效果较小,但std::cout是一个昂贵的操作更是如此。因此,当您从for循环中删除cout时,所需时间不到1毫秒。然而,cout执行百万次会使您的程序非常慢,这是预期的行为。您可以在使用的地方添加一些更算术的操作“a”,您可以在for循环之外打印结果,以便“a”仍然有效

int i=0;
int a = 0;
for(;i<1000000;i++){
    a = i*434243;
    a += i;
    //cout<<a<<endl;
}
cout<<a<<" " <<i<<endl;
inti=0;
int a=0;

对于(;i没有影响的操作将被优化。循环的内容只影响一个局部变量,该变量在超出范围之前未被使用。(它仅在循环内部的范围内。)通常很难创建不优化为零的测试代码。或者,您保留所需的代码,但最终也会对其他操作(如保存结果)进行计时。我建议您尝试

  • 将“int a;”置于循环之外
  • 使用“volatile int a;”
  • 生成一个函数并从循环中返回一个结果
  • 使循环中的计算依赖于上一个 迭代。例如a=a*a

您可以简单地关闭优化,例如使用-o0。但是,您的性能将很差,并且计时将不能代表在打开优化的情况下编译的正常实际代码。

将优化掉没有效果的操作。循环的内容只会影响一个未使用的局部变量oes out scope.(它仅在循环内部的作用域中。)通常很难创建不优化为零的测试代码。或者,您保留所需的代码,但最终也会对其他操作(如保存结果)进行计时。我建议您尝试

  • 将“int a;”置于循环之外
  • 使用“volatile int a;”
  • 生成一个函数并从循环中返回一个结果
  • 使循环中的计算依赖于上一个 迭代。例如a=a*a

您可以简单地关闭优化,例如使用-o0。但是,您的性能将很差,并且计时将不能代表在打开优化的情况下编译的正常实际代码。

您的循环具有未定义的行为,因此严格来说,任何事情都是允许的

warning: iteration 4946 invokes undefined behavior [-Waggressive-loop-optimizations]
     int a = i*434243;
note: within this loop
     for(int i=0;i<1000000;i++){
                 ~^~~~~~~~
时间:1.869e-06秒


您的循环具有未定义的行为,因此严格来说,任何行为都是允许的

warning: iteration 4946 invokes undefined behavior [-Waggressive-loop-optimizations]
     int a = i*434243;
note: within this loop
     for(int i=0;i<1000000;i++){
                 ~^~~~~~~~
时间:1.869e-06秒


它是如何工作的?你期望得到什么输出?你真正得到了什么?如果你删除
cout
,当使用优化编译时,编译器会意识到
a
的计算没有明显的副作用,并且会删除它。即使没有优化,1000000次乘法运算在2上也不会花费太长时间GHz cpu。撇开代码中的其他错误不谈:这是假设规则的一个基本表现形式:最终无法实现的代码可以被优化掉,只做N次相同的乘法,而没有显示或使用任何结果实现任何结果。关于这一点,有一些问题/答案,例如“正确的"循环所需时间的答案是0毫秒。欢迎使用优化,在优化过程中,微小的更改会产生巨大的差异。@NaW-编译器可以看到,如果只输出一个值,结果是
cout,它怎么不工作?您期望得到什么输出?您真正得到了什么?如果您删除
cout
,在使用优化编译时,compiler会意识到,
a
的计算没有明显的副作用,并且会消除它。即使没有优化,1000000次乘法运算在2GHz的cpu上也不会花费太长时间。抛开代码中的其他错误:这是“好像”规则的一个基本表现形式:最终什么都得不到的代码可以优化y、 只做N次相同的乘法,而不显示结果或对结果做任何操作都不会产生任何效果。关于这一点,有一些问题/答案,例如循环所需时间的“正确”答案是0毫秒。欢迎来到优化,这里有一些小的变化