时钟功能返回零时差



由于某种原因,以下程序打印出的持续时间=0.000000000000000000。我读过一个非常类似的问题。C‘clock((’函数只是返回一个零,但那里的建议没有帮助。我采集时间样本的循环是100次迭代,每一次都有一个精度为0.00000001的牛顿寻根方法,当然它不需要0秒^-20来计算吗?很抱歉,如果这些问题看起来真的很像家庭作业,那么我真的不懂编码。有人看到这里可能出了什么问题吗?谢谢

double f(...){...}
double h;
double newton (double prev_step_solution, double x)
{
double root=prev_step_solution;
while (((prev_step_solution+h*f(root,x)-root)>0.00000001)
||((prev_step_solution+h*f(root,x)-root)<-0.00000001))
{
root = root-(h*f(root,x)+prev_step_solution-root)/(h*fder(root,x)-1);
}
return root;
}             
int main()
{
int i;
double euler [2][101];
h=1/100;
std::clock_t start;   
double duration;
start = std::clock();
for (i=1; i<=200; i++)
{
euler [0][i] = h*i;
euler [1][i] = newton(euler[1][i-1],h*(i-1));
}
duration = ((double)( std::clock()-start  ))/((double) CLOCKS_PER_SEC);
printf(" euler %.20f n",(double)duration);
return 0;
}

另一种计时方法是使用std::chrono库。

#include <chrono>
#include <iostream>
int main()
{
auto start = std::chrono::steady_clock::now();
// do work
auto end = std::chrono::steady_clock::now();
auto result = std::chrono::duration<double, std::milli>(end - start).count();
std::cout << result << " millisecondsn";
}

对我来说很好。不过你的程序中有错误:

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

euler数组的大小是euler[2][101](101(,但您要对其进行200次迭代。

将循环更改为for (i=1;i<=100;i++)

此外,初始化启动->std::clock_t start = std::clock();

最新更新