オンライン統計計算機
XREAサーバーが増強されたことを受けて加筆しています. 不要になった部分はあえて見え消しにしています. テキストをそのままコピーすると余計な部分まで取り込む虞があります.
車輪の再発明… というよりも, プログラム作成練習ということで, 統計でよく利用される分布の統計数値表や統計量などを計算するプログラムを作成してみた. 知る人ぞ知る青木繁伸先生が公開されているプログラムのクローンである. 使用したプログラム言語は C++ で, Boost ライブラリを利用した. Boost の開発者が発表した特殊関数計算にかかる近似誤差は, 青木先生が公開している AWK プログラムを直接 C++ に移植したものよりも小さいので, より正確な値が出力されるものと期待できる.
現在間借りしている XREA は, CGI プログラムとしてマシンネイティブなバイナリを利用することが認められている. ただし, 設置者の環境で行ったものをアップロードする必要がある. サーバーの環境を調べてみると, Linux 32ビットLinux 64ビット環境で動いていることが分かったので…
- Windwos 用のプログラムバイナリを使うことができない. Linux 用のプログラムを生成する必要がある
- 筆者の環境は64ビットアーキテクチャであるが,
32ビット版のバイナリを生成する必要がある.64ビット版のバイナリか32ビット版のバイナリを用意する必要がある.
という問題が発生した.
この問題を解決するために筆者が構築した環境は次のとおりである.
- Windwos 10 v1607 (x86_64)
- VMWare Workstation Player v12.5
- Ubuntu v16.04
- GNU Compiler Collection on Ubuntu v5.4.0-6
- Windows 環境から Linux 環境を作るには, マルチブート環境をつくるか既存の OS からエミュレータを作動させるという選択肢がある. 前者の方法で間違ってシステムを壊してしまうと取り返しがつかなくなるので後者の方法を選択した. 候補として
- coLinux
- VMWare Workstation Player
が挙がったが,
前者は 64bit 環境では動かなかったので, 仕方なく後者を選択した. エミュレータに速度は期待してはならないが, コンパイラとしてしか使用しないのであればストレスは少ないだろう. - エミューレートさせる Linux ディストリビューションは何でもよかったのだが, ホスト側が 64bit ならゲスト側も 64bit にしないと動作がおかしくなるだろうと考え, 初心者にも易しいとされる Ubuntu を選択した.
- Linux OS 側も 64 ビットである
から, コンパイラ側で32ビットバイナリを吐き出させなければならない.Ubuntu も RedHat 系であるから,sudo apt-get install gcc-multilib g++-multilib
で下準備は完了. - 一部の関数は C++11 由来のものを使っていた (例えば, <cmath> の
lgamma
) こと, また, Boost は標準のライブラリではないことから, 静的なライブラリ指定を行う必要があった. 次のようなコマンドオプションを指定して解決した.g++ -std=c++11
-m32-static ...
以上により, C++ による CGI プログラムを作成することができた.
昔は (今も?) ごにょごにょしてサーバーでコンパイルできたので, ソースファイルをアップロードすればどうにかなったのだが…