2015/04/11

Raspberry Piで円周率の計算をやってみた

ラズベリー・パイで円周率πの計算(100万桁)をしてみました。

(1)実行環境について


マシン:Raspberry Pi B+
O S:RASPBIAN(2015-02-16版)

(2)円周率計算プログラムについて


GMPの「Compute billions of digits of π using GMP!」にあるgmp-chudnovsky.cを使用させて頂きました。

(3)GMPライブラリと円周率計算プログラムのダウンロード、コンパイル


作業フォルダ"pi"を作成し、そこにGMPライブラリと円周率計算プログラムをダウンロード、コンパイルします。

$ mkdir pi
$ cd pi
$ wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.xz
$ tar xvf gmp-6.0.0a.tar.xz
$ cd gmp-6.0.0/
$ ./configure
$ make -j4
$ make -j4 check
$ cd ..
$ wget https://gmplib.org/download/misc/gmp-chudnovsky.c
$ cc -Wall -static -o gmp-chudnovsky gmp-chudnovsky.c -Igmp-6.0.0 -Lgmp-6.0.0/.libs -lgmp -lm
raspbianデフォルトの状態では"m4"が入っていないためconfigureがエラー終了します。その場合は"sudo apt-get install m4"でm4をインストールします。その後、もう一度./configureを実行します。

GMPのコンパイルは小一時間かかります。(Raspberry Pi B+の場合)

(4)円周率計算プログラムの実行


・円周率1,000桁

円周率表示ありで0.03秒でした。

$ time -p ./gmp-chudnovsky 1000 1
#terms=70, depth=8
sieve   time =  0.000
...................................................

bs      time =  0.010
   gcd  time =  0.000
div     time =  0.000
sqrt    time =  0.000
mul     time =  0.000
total   time =  0.010
   P size=1334 digits (1.334000)
   Q size=1327 digits (1.327000)
pi(0,70)=
0.314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019894e1
real 0.03
user 0.01
sys 0.00
・円周率100万桁
円周率表示なしの計算のみで14.74秒でした。

$ time -p ./gmp-chudnovsky 1000000
#terms=70513, depth=18
sieve   time =  0.150
..................................................

bs      time = 10.910
   gcd  time =  0.000
div     time =  1.800
sqrt    time =  0.970
mul     time =  0.730
total   time = 14.580
   P size=1455608 digits (1.455608)
   Q size=1455601 digits (1.455601)
real 14.74
user 14.58
sys 0.09

【備忘録】時系列データの編集方法(R言語, tidyverse)

TimeSeries.knit 1 サンプルデータ作成 2 日付単位に集計する 2.1 月毎集計 2.2 四半期毎集計 ...