C++ 时钟函数返回零时差

C++ 时钟函数返回零时差,c++,timing,C++,Timing,出于某种原因,以下程序打印出duration=0.000000000000000000000000。我读过一个非常类似的问题,但建议没有帮助。我采集时间样本的循环是100次迭代,每一次迭代都有一个精度为0.00000001的牛顿寻根法,当然计算不会花费0秒^-20?很抱歉,如果这个问题看起来真的像家庭作业,我真的不懂编码。有人看到这里可能出了什么问题吗?谢谢 双f(…){…} 双h; 双牛顿(双上一步解,双x) { 双根=上一步解; 而((上一步溶液+h*f(根,x)-根)>0.00000001

出于某种原因,以下程序打印出duration=0.000000000000000000000000。我读过一个非常类似的问题,但建议没有帮助。我采集时间样本的循环是100次迭代,每一次迭代都有一个精度为0.00000001的牛顿寻根法,当然计算不会花费0秒^-20?很抱歉,如果这个问题看起来真的像家庭作业,我真的不懂编码。有人看到这里可能出了什么问题吗?谢谢

双f(…){…} 双h; 双牛顿(双上一步解,双x) { 双根=上一步解; 而((上一步溶液+h*f(根,x)-根)>0.00000001)
||((上一步解决方案+h*f(root,x)-root)对我来说效果很好。不过您的程序中有错误:

for (i=1;i<=200;i++)
{
    euler[0][i]=h*i;
    euler[1][i]=newton(euler[1][i-1],h*(i-1));
}

for(i=1;i另一种计时方法是使用
std::chrono

#包括
#包括
int main()
{
自动启动=标准::时钟::稳定时钟::现在();
//工作
自动结束=标准::时钟::稳定时钟::现在();
自动结果=std::chrono::duration(end-start).count();

STD:实际上尝试打印结果。如果不使用,编译器可以自由地优化它们,导致0次使用。C和C++是不同的编程语言和习语。请不要标记它们。这些数字是正确的。是的,C++真的很快。还要注意程序有未定义的行为。ior从一开始就是正确的。当您在第一次迭代中使用它时,您从未初始化过
euler[1][0]
,后来您迭代到边界之外,因为数组只有101个元素,而不是201个。“对我来说很好。”应该是一个注释,我认为提及越界也应该是一个注释,因为它不太可能是问题的主要原因。您是否在启用优化的情况下测试了代码?我不能,因为代码不完整,但我希望整个计算都会按照@NathanOliver在注释中的建议进行优化。即使我仅使用以下内容:
for(int i=1;i)您仅测量获取
std::clock
指令所需的时间。如果您为其添加预热调用,则可以轻松地将其精确降至零,请参见。(如果显示的值不是零,请单击“重新编译”按钮几次,它会偶尔发生变化。)还请注意,对于程序集中的
std::clock
调用之间的返回值,除了
mov
之外,没有任何其他内容。请注意,这测量的是挂钟,而不是处理器时间,正如
std::clock
所测量的那样。我也不确定您是否期望这种方法产生不同的结果,如果是,原因是什么?老实说,我不知道d差异和不知道
std::clock
都在一起。谢谢你教我。