■ライプニッツの公式
π/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");
}
■実行結果
+ 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~ 文字列