LIMandel

マンデルブロ集合を計算

このサイトのトップへ 柔へ

背景

(のっけからつぶやきモードで)「『マンデルブロ集合』って何?」という方は検索エンジンを使って、どんなものか見てみて下さい。 人によっては LIM のようにマンデルブロ集合を好きになるかもしれません。

↓昔話ここから

LIM が学生時代に先生から「腕試しだと思ってひとつプログラムを作ってみてくださいよ」 と言われてなんとなく作ってみたのが LIM とマンデルブロとの出会いです(要は課題だったわけですが)。 かれこれ何年も前の話になったりします (遠い目)

その時は Sun のワークステーションの X-Window 上で動くものを作ったと記憶しているのですが

ウィンドウの大きさ固定…つまり作る画像の大きさも固定
計算回数も起動時に指定したっきり変更不可
カラーリングは1種類のみ
計算を繰り返していくうちに画像の縦横比が狂う
当然、画像なんて保存できない

というプログラムでした。

しかしながら単純な計算式から作り出される複雑な画像は、 学校を卒業できるかどうか怪しく、時間のないはずの LIM を夢中にさせ、 深夜端末の前でプログラムを起動しては色々な場所を計算させて悦に浸る… という事を LIM に繰り返させたのでした。

しかも時間がないというのにも関わらず、 当時のコンピュータの計算能力では640×480の画像で10,000回を超えるような計算をさせると 「これ、いつ計算が終わるのよ」というような状況になったものでした。

↑昔話ここまで

それからウン年。世紀も変わり、ふと「今のコンピュータでマンデルブロ計算させると どのくらいの速度で計算してくれるんだろう?」と思った LIM は マンデルブロの復習をしながらプログラムを書き始めたのでした…。

ナニをしてくれるか?

LIMandel 起動

LIMandel.exe はマンデルブロ集合を計算・描画するプログラムです。

プログラムそのものは 2006 年当時にほぼ出来上がっていたのですが、 色々あって公開は 2009 年の年末になってしまいました。

基本的な使い方は付属のマニュアルに書いてあるので、そちらを参照して下さい。

できるだけ手軽にマンデルブロ集合を楽しめるように作ってはいますが、 「こうした方がもっと手軽になるかもしれない」というようなアイディアを 思いついた方はメールでご連絡下さい。 保障はできませんが、ナイスなアイディアは取り込んでいきたいと思います。

さてさて、あなたの PC はどのくらいの速度でどんな画像を作ってくれるのでしょうか?

バージョン 1.1 について

今回のバージョンアップは、同僚が「以前に SSE で FFT のプログラムを作った事がある」と言うのを聞き 「負けてられない。久しぶりに LIM もアセンブラやってみよう。」と考えたのが事の始まりです。

そんなわけでバージョン 1.1 では、一番時間のかかる計算部分を x87 (FPU) アセンブラで記述しています。 アセンブラの記述そのものは C++Builder のインライン・アセンブラを使用して記述しています。

これまで LIM は 8086 アセンブラは経験あるものの FPU は使った事がありません。 インライン・アセンブラでのコメントの書き方さえも分からず、 最初にコンパイルした時は見た事ないエラーがゾロゾロ出てきて、びっくりしたりしました。 また、正しくプログラムしていてもリリース・モードでビルドすると動作しないといった現象にも見舞われ、 これをクリアするのに時間を要してしまいました。

結局リリース・モードで動作しない現象については、 インライン・アセンブラのところだけ #pragma 命令で最適化オプションをオフにする等の対処を行った。

手元にある x87 の資料がインテルのリファレンス・マニュアルしかなく、 全く手探りでの開発となりました。 だいぶテストしましたが、 FPU や Windows のお約束を知らずにプログラムしてしまっているかもしれません。 そんなわけで、特定の環境化では動作しない恐れがあります。

デバッグには C++Builder の FPU デバッグを使っていたんだけど、原因不明のハングに何度も見舞われたのよね…。 しかも、ちゃんと動作するプログラムをデバッグさせていても FPU デバッガがハングするのよね… プログラムに問題があるのか、FPU デバッガに問題があるのか未だに良く分かっていない…。

皆様の手元で無事に動作するようであれば、以前のバージョンのものよりも計算時間が若干短くなっているものと思います。 LIM の環境では、計算時間が最大 1/4 程度にまで短くなっているのを確認しています。 今回は以前のバージョン (1.0.0.15) もこのページに残しておきますので、皆様の環境で比較動作させてみて下さい。

開発・動作環境

9x / Me / NT4 / 2000 / XP の各 Windows で動作すると思います。

バージョン 1.0.0.15 は Windows 2000 上の Borland C++Builder 6 Professional で、 バージョン 1.1.0.56 は Windows XP 上の Borland C++Builder 6 Professional で行っております。

協力有難う

genjix (学生時代から) LIMandel のデフォルトのカラーリングや計算範囲指定の方法について教えてくれました。
taka (ムッチ〜) セピア色のカラー・リングを追加しては?との意見をもらいました。

敬称略

更新履歴

バージョン 日付 内容
1.0.0.15 20091216 初期リリース
1.1.0.56 20110403 FPU 版リリース

お持ち帰りはこちらです

ダウンロード・アイコン LIMandel (バージョン 1.0.0.15) お持ち帰りパック (479,243 Bytes)
ダウンロード・アイコン LIMandel (バージョン 1.1.0.56) お持ち帰りパック (503,129 Bytes)
ダウンロードしてアーカイブを解凍したら、それぞれ最初に LIMandel.txt を読んで下さい。
このサイトのトップへ 柔へ

初版 20070107