調べてみると色々な方法があるようですが,現状は以下のように計測しています.
実験では調和級数の部分和:
$$ \sum_{k=1}^{n} \frac{1}{k} = 1 + \frac{1}{2} + \frac{1}{3} + \cdots + \frac{1}{n} $$
を計算しています.
#include <iostream>
#include <time.h>
int main()
{
double a = 0.0;
int n = 1000000000;
clock_t start = clock();
//処理
for (int i=0; i<n; i++)
{
a += (double)1 / (i+1);
if (i%100000000==0)
{
std::cout << "i = " << i << " : " << a << std::endl;
}
}
clock_t end = clock();
// const double time = static_cast<double> (end-start) / CLOCKS_PER_SEC * 1000000.0; //microsec
// const double time = static_cast<double> (end-start) / CLOCKS_PER_SEC * 1000.0; //millisec
const double time = static_cast<double> (end-start) / CLOCKS_PER_SEC * 1.0; //sec
std::cout << "time = " << time << " [sec]" << std::endl;
std::cout << "a = " << a << std::endl;
return 0;
}
出力結果は次のようになりました.
i = 0 : 1
i = 100000000 : 18.9979
i = 200000000 : 19.691
i = 300000000 : 20.0965
i = 400000000 : 20.3842
i = 500000000 : 20.6073
i = 600000000 : 20.7897
i = 700000000 : 20.9438
i = 800000000 : 21.0773
i = 900000000 : 21.1951
time = 4.64131 [sec]
sum = 21.3005
以上です.余談ですが,調和級数の和は無限大に発散するのにもかかわらず,1億回加算しても$21.3$程度にしかならないのは驚きですね.