【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 <stdio.h>
#include <stdint.h>
long double 円周率計算(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,反復回数);
    return pi * 4;
}

int main(void) {
    uint64_t    反復回数 ;
    反復回数 = 10UL ;       円周率計算(反復回数);
    反復回数 = 100UL ;      円周率計算(反復回数);
    反復回数 = 1000UL ;     円周率計算(反復回数);
    反復回数 = 10000UL ;    円周率計算(反復回数);
    反復回数 = 100000UL ;   円周率計算(反復回数);
    反復回数 = 1000000UL ;  円周率計算(反復回数);
    反復回数 = 10000000UL ; 円周率計算(反復回数);
    反復回数 = 100000000UL ;円周率計算(反復回数);
    反復回数 = 1000000000UL;円周率計算(反復回数);

//参考 M_PI
//https://www.wdic.org/w/TECH/M_PI
# define M_PI           3.14159265358979323846  /* pi */
    printf("円周率の近似値: %.20f~\t定数\n", M_PI);
# define M_PIL          3.14159265358979323846L  /* piL */
    printf("円周率の近似値: %.20Lf~\tL定数\n",M_PIL);
    printf("円周率の近似値: 3.14159265358979323846~\t文字列\n");
}

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

実行結果

+ gcc pi.c -O3
+ ./a.out
円周率の計算値: 3.04183961892940324390  10回
円周率の計算値: 3.13159290355855368659  100回
円周率の計算値: 3.14059265383979413500  1000回
円周率の計算値: 3.14149265359003448950  10000回
円周率の計算値: 3.14158265358971977577  100000回
円周率の計算値: 3.14159165358977432447  1000000回
円周率の計算値: 3.14159255358979150330  10000000回
円周率の計算値: 3.14159264358932599492  100000000回
円周率の計算値: 3.14159265258805042720  1000000000回
円周率の近似値: 3.14159265358979311600~        定数
円周率の近似値: 3.14159265358979323851~        L定数
円周率の近似値: 3.14159265358979323846~        文字列