ostream双精度

时间:2017-03-04 13:51:54

标签: c++ precision ostream

所以我实现了自己的array数据结构。我已经实施了以下操作:

  1. 在指定索引上添加元素
  2. 删除元素-------- || --------
  3. 检查数组中是否存在值
  4. 现在我必须测量这些操作的时间。我有这段代码:(我正在使用Visual Studio C ++)

    LARGE_INTEGER clock, start, end, result;
    QueryPerformanceFrequency(&clock);
    int sizes[] = { 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000 };
    long double seconds;
    long double summedSeconds = 0;
    std::ofstream myfile;
    myfile.open("results.txt");
    std::setprecision(10); //I want the precision to be 1ns + 1 bit for rounding
    for (auto&x : sizes)
    {
        for (int i = 0 ; i < 100; i++)
        {                   
            myArray.generate(x); // this generates myArray of size x
            QueryPerformanceCounter(&start);
            myArray.insert(1, x / 2); //this will insert value of 1 into an index = half of array
            QueryPerformanceCounter(&end);
            result.QuadPart = end.QuadPart - start.QuadPart;
            seconds = (long double)result.QuadPart / (long double)clock.QuadPart;
            summedSeconds += seconds; // this is summed up for 100 example data                 
        }
        std::cout << summedSeconds/100 << '\n';
    
        myfile << std::fixed << std::setw(6) << x << "\t" << summedSeconds/100 << '\n';
    }
    myfile.close();
    

    现在,这在results.txt

    中给出了类似的内容
       100  0.000008
       200  0.000013
       500  0.000031
      1000  0.000052
      2000  0.000115
      5000  0.000287
     10000  0.000568
     20000  0.001134
     50000  0.002017
    100000  0.003756
    

    因此,根据元素的数量,测量时间。但是讲师想要~1ns精确,所以这还不够(现在它只有6位,我想要至少9-10)。当我还没有将其保存到文件中时,我使用coutstd::fixed std::cout.precision(10)了解这些信息。它按我的意愿工作。如何使其保存到文件?

    P.S我很遗憾无法使用boost::

1 个答案:

答案 0 :(得分:1)

您与cout一起使用的相同操纵器可以与fstreams一起使用,没有任何问题。尝试使用您在打印到标准输出时使用的相同代码。