Web開発者の日常

主にプログラミング関連。たまに日常も綴ります。

HTML5 Web Workers で円周率計算

time 2013/06/09

こんにちは!

最近過ごしやすくなってきた札幌で、コードを書きながらのんびり過ごしている学生です。

先日、ブログのタイトルを変えました。

”自称プログラマーの備忘録” という名称はそろそろ飽きてきたのと、最早自称ではなくなったことから、 “Web開発者の日常” に変更しました。

ありきたりな名前でつまらない気もしますが、当分このタイトルで続けようと思います。
これからもよろしくお願いします。

さて、このブログで初めてとなる数学の話題ですが、理系なのに数学は得意というわけではないので、何か誤りがあれば指摘してください。

※円周率計算と書いてますが、何兆桁目まで求めた!という話ではないです。残念。

 

先日、大学の微分積分学の授業で整級数展開 (マクローリン展開) を学びました。

前回の授業の課題でこのような問題が出題されました。

アークタンジェントの級数展開は

arctan x = 1 – x/3 + x2/5 – x3 /7 + x4 /9 – … + (-1)n xn / (2n + 1) ± …

で与えられる.これを n = 1000 まで用いて Excel などで π の近似値を計算せよ.

>> ”Excel などで π の近似値を計算せよ”

これは、コードを書くしか無いのでは!と。

π の計算方法は中学生の頃に興味を持った覚えがありますが、当時インターネットで調べてみたところ、中学生には難しい内容ばかり。微分積分はもちろん、無限等比級数なんて知らなかったので、諦めました。

中学生の頃の自分に、高校数学を独学で先取りして勉強する程の気概あったら… 数学に目覚めて、今頃どこかの大学の数学科に居たかもしれませんね。

話が逸れましたが、この計算は C/C++ で書くのが速くて一般的だと思います。ただ、既に同じ授業を取っている学生が C で書いていて冷めたので、 JavaScript で書いてブラウザで計算できるようにしました。

 

計算方法を簡単に説明します。

arctan x (アークタンジェント) は tan x (タンジェント) の逆関数で、

arctan(tan x) = x
tan(arctan x) = x

という性質を持っています。

tan x = sin x / cos x … ①

sin(π/4) = cos(π/4) … ②

①, ②より、

tan(π/4) = sin(π/4) / cos(π/4) = 1

これをアークタンジェントを用いて表すと…

π/4 = arctan 1
π = 4 × arctan 1

となります。 arctan 1 の正確な値が計算できれば、 π が求められることになります。

arctan 1 の値を求めるために、整級数展開 (マクローリン展開) します。

すると、次の方程式が求まります。 (途中式省略)

arctanx

x に 1 を代入して 4 倍すると π が求まるので、これを JavaScript を用いてブラウザで計算します。

無限に計算させる訳にはいかないので、 ∞ の部分を定数で置き換えて π の近似値を計算します。

これをそのまま JavaScript に書下せば良いのですが、普通にブラウザで計算させようとすると計算量が多すぎてクラッシュしてしまいます。

ここで、 HTML5 で追加された新機能 Web Workers を使います。

Web Workers を使うと UI スレッドとは別にバックグラウンドで計算処理させることができます。

実際に計算するサンプルはこちら↓です。

PI = ?

ソースはこちら↓

Worker (上記の計算処理)
http://viewsource.in/http://dev.ww24.jp/javascript/PI/pi.js

Worker の呼び出しと結果の表示
http://viewsource.in/http://dev.ww24.jp/javascript/PI/

 

Web Workers は、 UI スレッドをブロックすることなく重たい処理が実行できるので、 File API で大きなファイルを扱う場合や XMLHttpRequest で通信して大量のデータを処理をする場合に有効な手段です。

ただし IE9 以前の IE では使えないので、 IE 10 より前のブラウザもサポートする場合は処理を分ける必要がありますね。

Web Workers を使ってみたい!と思った方は、下記のページを参考にしてみてください。

https://developer.mozilla.org/ja/docs/Web/Guide/Performance/Using_web_workers

 

sponsored link

ブックマーク



アーカイブ

2017年3月
« 5月    
 12345
6789101112
13141516171819
20212223242526
2728293031