首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Iomanipset精度()方法不能正常工作,因为它只在第一行上工作,为什么?

Iomanipset精度()方法不能正常工作,因为它只在第一行上工作,为什么?
EN

Stack Overflow用户
提问于 2022-03-01 13:11:25
回答 1查看 120关注 0票数 0

因此,我正在编写一个程序来计算一个函数的执行时间,使用时钟,我用iomanip将输出更改为带有9个零的十进制。

这是我正在使用的代码:

代码语言:javascript
复制
#include <time.h>
#include <iomanip>

using namespace std;

void linearFunction(int input)
{
    for(int i = 0; i < input; i++)
    {

    }
}

void execution_time(int input)
{
    clock_t start_time, end_time;

    start_time = clock();
    linearFunction(input);
    end_time = clock();

    double time_taken = double(end_time - start_time) / double(CLOCKS_PER_SEC);
    cout << "Time taken by function for input = " << input << " is : " << fixed
         << time_taken << setprecision(9);
    cout << " sec " << endl;
}

int main()
{
    execution_time(10000);
    execution_time(100000);
    execution_time(1000000);
    execution_time(10000000);
    execution_time(100000000);
    execution_time(1000000000);

    return 0;
}

输出结果显示:

代码语言:javascript
复制
Time taken by function for input = 10000 is : 0.000000 sec
Time taken by function for input = 100000 is : 0.001000000 sec
Time taken by function for input = 1000000 is : 0.002000000 sec
Time taken by function for input = 10000000 is : 0.038000000 sec
Time taken by function for input = 100000000 is : 0.316000000 sec
Time taken by function for input = 1000000000 is : 3.288000000 sec

正如您所看到的,当我第一次调用这个函数时,它并不遵循我所写的set精度(9)。这是为什么,我如何解决这个问题?提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-01 13:28:25

正确地查看以下一行:

代码语言:javascript
复制
cout << "Time taken by function for input = " << input << " is : " << fixed << time_taken << setprecision(9);

看见?打印出time_taken后,您正在设置精度。因此,您第一次没有看到setprecision()的结果。但是第二次和以后,由于setprecision()已经被执行,您将获得所需的十进制位。

因此,要解决此问题,请将setprecision()移到time_taken之前,如下所示:

代码语言:javascript
复制
cout << "Time taken by function for input = " << input << " is : " << fixed << setprecision(9) << time_taken;

..or您也可以这样做:

代码语言:javascript
复制
cout.precision(9);
cout << "Time taken by function for input = " << input << " is : " << fixed << time_taken;

此外,考虑不要在代码中使用以下行:

代码语言:javascript
复制
using namespace std;

..as --这被认为是一种糟糕的做法。相反,每次像这样使用std:

代码语言:javascript
复制
std::cout.precision(9);
std::cout << "Time taken by function for input = " << input << " is : " << std::fixed << time_taken;

有关这方面的更多信息,请访问why is "using namespace std" considered as a bad practice

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71308999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档