2017-03-04 7 views
0

私は独自のarrayデータ構造を実装しました。ostream double precision

  1. が存在するかどうかの確認要素-------- -------- ||
  2. を削除する指定したインデックス
  3. に要素を追加する:私は、次のような操作を実装しました値は配列にあります

これらの操作の時間を測定する必要があります。私はこのコードを持っている:(Visual StudioのC++を使用してIM)

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::fixedstd::cout.precision(10)を使用して、その情報をcoutとしました。そして、私が望むように働いた。ファイルに保存するにはどうすればいいですか?私は残念ながらあなたがcoutで使用したのと同じマニピュレータは、何の問題もなくfstreamsで使用することができますboost::

+1

'precision()'が使用している 'std :: ofstream'ではうまく動作しないと言った人は明らかに間違っていました。 –

+0

しかしそれは 'std :: cout.precision(10)'だったので、 'cout'を何かに置き換えるべきでしょうか? @編集、大丈夫です。 'myfile.precision()'は仕事をしました – Frynio

答えて

1

を使用することはできません

P.S。標準出力に印刷するときと同じコードを使用してみてください。

+0

そうです、ありがとう! – Frynio

関連する問題