【小ネタ】区分求積法でπの近似値を求めるアルゴリズム
どうも、drumathです。今回はちょっとしたチップスとして、πの近似値を求めたいと思います。使用する言語はC++です。
数Ⅲ生の十八番
数Ⅲで積分をしていると、置換積分やらなんやらのおかげで一見関係なさそうなところでが出てきます。
今回はそんな積分の中から、受験生の十八番ともいえるやつを使います。
区分求積法で近似する
ここで、区分求積法を用いると、
コードを書く
では先ほどの結果をもとにコードを書いてみました。
#include <stdio.h> #include <math.h> double pi_calc(double); int main(void) { for (int i = 1; i < 1000000; i++) printf("\r%d: %f", i, pi_calc((double)i)); return 0; } // 区分求積法を用いたアルゴリズム double pi_calc(double n) { double res = 0; for (int k = 1; k <= n; k++) res += 1.0 / (1.0 + pow(((double)k / n), 2.0)); return 4.0 * res / n; }
を100万まで動かします。
コードでところどころdoubleを使っているのは、floatを使ってしまうと誤差補正のせいで値がぶれてしまうことを防ぐためです。
今回は以上になります。最後まで読んでいただき、ありがとうございました。