ostream 双精度
ostream double precision
所以我实现了自己的 array
数据结构。我已经实施了以下操作:
- 在指定索引上添加元素
- 删除一个元素--------||--------
- 检查数组中是否存在该值
现在我必须测量这些操作的时间。我有这段代码:(我使用 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位)。当我还没有将它保存到文件时,我正在使用 std::fixed
和 std::cout.precision(10)
cout
获取该信息。它按我的意愿工作。我怎样才能让它保存到文件?
P.S 很遗憾我不能使用 boost::
您在 cout
中使用的相同操纵器可以毫无问题地与 fstreams
一起使用。尝试使用打印到标准输出时使用的相同代码。
所以我实现了自己的 array
数据结构。我已经实施了以下操作:
- 在指定索引上添加元素
- 删除一个元素--------||--------
- 检查数组中是否存在该值
现在我必须测量这些操作的时间。我有这段代码:(我使用 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位)。当我还没有将它保存到文件时,我正在使用 std::fixed
和 std::cout.precision(10)
cout
获取该信息。它按我的意愿工作。我怎样才能让它保存到文件?
P.S 很遗憾我不能使用 boost::
您在 cout
中使用的相同操纵器可以毫无问题地与 fstreams
一起使用。尝试使用打印到标准输出时使用的相同代码。