広告 WordPress関連 閑話ブログ

Web上で円周率(π)の多桁計算ができる!BASIC 版のπ計算プログラムをPHPに移植してみた

πの多桁計算プログラム(PHP-Ajax)

桁数設定 → [計算開始]ボタン

計算開始

 

WordPressの基盤となるPHP言語の理解を深めるため、「N88-BASICによるはじめてのアルゴリズム入門」に掲載されているπの多桁計算プログラムコードを参照し、Webブラウザ上で円周率(π)の多桁計算を実行できるPHP言語に移植してみました。

PHPは、BASICと同じくインタープリター言語で、BASIC言語にも近く、簡単に移殖できると思ったものの、やはり手こずってしまいましたので、この点を含めて紹介します。

 

 

PHPについて

PHP(PHP は再帰的な略称で "Hypertext Preprocessor"ですが、元々は “Personal Home Page tools” という意味だったそうです)を勉強するに当たり、㈱翔泳社の「プログラミング学習シリーズ PHP① はじめてのPHPプログラミング」を購入しました。 

CD-ROMも添付されていて、初心者にとっては、中々わかりやすく書かれていると思います。 PHPプログラミングを始めるにあたり、ローカルアパッチサーバーを設置する必要があり、Windows用のXAMPPのインストールについてもわかりやすい説明が記載されています。 (当サイトでは、MAC用のMAMPがインストールされいます。)

WordPressは、そもそもPHPで構成されている動的WebページですのでPHP言語を知ることはサイト管理者にとって有意義なことではないでしょうか。

 

πの多桁計算プログラムについて

πの多桁計算ソフトで有名なのはスーパーπです。 このソフトは、パソコンのベンチマーク等で利用され、計算速度も早く非常に優れていると思いますが、パソコンにプログラムをインストールした上で実行しなければなりません。

一方、PHPを使用したプログラムであれば、パソコンのOSにも依存せずWeb上で、πの多桁計算プログラムが実行でき、更にPHPソースコードは公開されません(後述)。

今回のπの多桁計算プログラムは、N88-BASICによるはじめてのアルゴリズム入門」に載っていた、マチンの公式を使用したBASICを随分昔に手を加えてVisual BASIC化したものを更に今回、PHPに移殖しました。。

N88-BASICによるはじめてのアルゴリズム入門
”河西 朝雄タイトル” をAmazonで確認

参考にした『N88-BASICによるはじめてのアルゴリズム入門』は、元はC++で作成したものをBASICに焼き直しされたようです。 既にこの書籍は絶版で中古本でしか手に入らず、残念ながらもはやBASICは忘れ去られた言語かもしれません。  参考として、「C++円周率計算(マチンの公式)!」でC++でのソースコードがネットで掲載されていました。

なお、PHPの移殖に当たっては、PHP言語にも対応している mi (テキスト エディタ))を使用しました。

 

πの多桁計算をWeb上で実行するには

  1. Ajax (Asynchronous JavaScript and XML)の利用
    Ajax を利用すれば、入力した桁数をサーバー側のプログラムに渡して処理することも可能です。 当ページの冒頭で示す 「π の多桁計算プログラム」は、この Ajax を利用してショートコード化し、WordPress の投稿ページに配置しています。
  2. iframe(インラインフレーム)の利用
    Web 上で π の桁数を指定して計算する方法として、入力された桁数を PHP に渡し、PHP で計算した結果を表示する HTML を 1 ページにまとめてサイト上に設置し、WordPress の投稿ページに iframe で読み込ませる方法があります。(下記「iframeの利用手順」を参照)  この方法は、一つのページ内で完結するため、分かりやすく、デバッグも容易です。

注記)いずれの方法でも、桁数が多くなると計算量が増えてサーバーに負荷がかかるため、注意が必要です。

iframeの利用手順

  • πの多桁計算BASICプログラムをPHPに移植し、独立したPHPファイル(Webページ)を作成
  • サーバーの処理パフォーマンスがわかるように、計算処理時間も表示するようにPHPファイルに追記しています。
    また、サーバーに負荷がかかるので、桁数選択を2000桁(最大)までにしています。
  • 完成したPHPファイルをサーバーにUPして、WordPressの投稿ページ内にPHPファイルのURLを指定した<iframe>を埋め込むことで、Web上でπの多桁計算を実行することができる様になります。

完成したものを下に示します。

[桁数を選択]して[計算開始]ボタンを押すと
πの多桁計算が行えます!

πの多桁計算プログラム(PHP-iframe)

 

PHPファイルのWeb上の振る舞い(参考)

PHPファイルをブラウザのソースコードで見ると、HTMLのソースコードは見えますが、PHPコードは表示されません。 これは、ブラウザからPHPファイルをリクエストすると、サーバーがPHPの命令を読み取って計算結果だけをHTMLコードに書き換えるからです。 

例えば、以下の簡単なPHPファイルをサーバーに設置して、ブラウザからPHPファイルのURLをリクエストとすると、サーバーは、変数($a〜$d)の値を読取ってHTMLに書き換えますので、ブラウザ側から見ると、PHPコード 『 <?php 〜 ?> 』が消えているのが分かります。

PHPファイルのソース

ブラウザから見ると

Safariで[開発]→[ページのソースを表示]

 

PHP化でつまずいた点・注意点まとめ

ポイント

  • BASICでは、改行すれば良かったが、PHP言語では、ステートメント(実行単位)の終わりにセミコロン「;」を付けないで、例えば、<?php echo ‘テスト’ ; ?>でセミコロンが無い状態でプログラムを実行すると画面がホワイトアウトしてしまいます。
  • 文字配列の結合で、BASICでは “ABCD” + “EFGH”で記述していましたが、PHPでは、「 . 」ドットで“ABCD” . “EFGH”の様に結合させます。
  • 文字列の途中改行で、BASICでは、Chr$(13) + Chr$(10) にしていましたが、PHPでは、HTMLへ出力するので . "<br />" にします。
  • 文字列操作で、BASICでは、右から4文字抜き出す場合、Right$(ABCDEFG, 4)  でしたが、PHPでは、substr("ABCDEFGH", -4) で表記します。
  • For文で、BASICでは、 for i=0 to 100 としている場合、PHPでは、 for $i = 0 $i <= 100; $i++) と表記します。 $i =100 で表記するとNGです。 何故なら $iが100の値 1点のみで true になるからです。 これは、BASICより合理的ですね。
  • 関数(function)と globalキーワードです。 関数内の変数は、ローカルスコープで値が管理されていて、関数の外から参照できません。 これは、全てがグローバルスコープとすると、変数が重複したときの問題を回避するための様です。 よって、関数外でも参照できるようにするためには、関数内で必要な変数をグローバル変数に定義します。 例:global $A ,$B ,$C ;
  • 一番戸惑ったのは、 if文でした。 完成と思ったものの、プログラムを実行すると、πの値が相違してしまいました。 何度コードを読み返しても 虫が見つからず2日ほどデバックに費やしました。 原因は 値が等しい比較演算子 == にすべきところ、単純に = と表記していたことでした。 例: if($FLAG == 1){ LADD($A ,$B); }

 

以上、π多桁計算 プログラムのPHP化でした。 PHPへの理解についてはまだまだ先ですが、PHPのπ多桁計算プログラムがOSに依らず、Web上で動くことに感動!した次第です。

 

スポンサーリンク