【C言語】
円周率πをライプニッツの公式で求める

■この記事の概要

この記事では、C言語でライプニッツの公式を使って円周率を計算する短いプログラムを紹介しています。公式の数学的背景を説明しつつ、反復回数を変化させた際の計算精度の変化を実行結果とともに示しています。また、浮動小数点の円周率を高精度で表示する方法についても解説しています。


■ライプニッツの公式

π/4 = 1 – 1/3 + 1/5 – 1/7 + 1/9 – 1/11 + …

■円周率πを求めるC言語プログラム

//ライプニッツの公式
//  π/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...
#include <stdint.h>
#include <stdio.h>
void 円周率計算(uint64_t 反復回数) {
    long double     pi = 0.0L ;
    int             符号 = 1;
    uint64_t        分母 = 1;
    for (uint64_t i = 0; i < 反復回数; i++) {
        pi += (long double)符号 / 分母;
        符号 *= -1;
        分母 += 2;
    }
    printf("円周率=%.20Lf\t反復回数=%ld回\n", pi*4,反復回数);
}
int main(void) {
    for(uint64_t 反復回数 = 10; 反復回数 <= 1000000000UL; 反復回数 *= 10){
        円周率計算(反復回数);
    }
}
./a.out 
円周率=3.04183961892940221109   反復回数=10回
円周率=3.13159290355855276437   反復回数=100回
円周率=3.14059265383979292654   反復回数=1000回
円周率=3.14149265359004324053   反復回数=10000回
円周率=3.14158265358979349176   反復回数=100000回
円周率=3.14159165358979318525   反復回数=1000000回
円周率=3.14159255358979309708   反復回数=10000000回
円周率=3.14159264358979407840   反復回数=100000000回
円周率=3.14159265258979522790   反復回数=1000000000回

浮動小数点の円周率を出来るだけ正確に表示する書式

//浮動小数点の円周率をできるだけ正確に表現する書式
#include <stdio.h>
#define M_PI           3.14159265358979323846   /* pi */
#define M_PIL          3.14159265358979323846L  /* piL */

int main(void) 
{
    printf("円周率: %f~\t定数\n",      M_PI);
    printf("円周率: %.20f~\t定数\n",   M_PI);
    printf("円周率: %.20Lf~\tL定数\n", M_PIL);
    printf("円周率: 3.14159265358979323846~\t文字列\n");
}
./a.out 
円周率: 3.141593~      定数
円周率: 3.14159265358979311600~        定数
円周率: 3.14159265358979323851~        L定数
円周率: 3.14159265358979323846~        文字列

M_PIやM_PILは標準ではないそうです。
参考:https://www.wdic.org/w/TECH/M_PI