大昔のフラクタルの計算とかの話

マンデルブロー集合が流行った頃の事
=============
ずいぶん昔にマンデルブロー集合がコンピュータを触る人間の中で流行った。
条件としての式は以下の通り

```math
\begin{cases}
x_{n+1} = x_n^2 - y_n^2 + a \\
y_{n+1} = 2x_n y_n + b
\end{cases}
```


で表される数式でnをくり返した場合、発散するのか、収束するのかはa,bの値で左右されるが、この発散するか、発散しないか微妙な境界線が発生する、この境界線は何度もnを増やす事で精度は上がって行くが、どれだけ計算しても複雑な曲線を描くだけになる。このa,bを縦横軸で描画するとなんか不思議な模様になる。

PCの性能
=============
この「いくら計算しても精度が上がるだけ」っていうのがコンピュータの計算を永遠に計算させてしまうので、大きな画像を綺麗に表示しようとすればするほど計算時間がかかってしまう。
昔のPCでの性能だと640x400の画面に描画するだけでも結構かかる処理だった。

パソコンサンデー
=============
もう、30年ほど前になるが、日曜の朝にシャープが提供しているパソコン番組「パソコンサンデー」が放映されていた。この番組では視聴者が投稿したパソコンプログラムを紹介するコーナーがあって、当時憧れのパーソナルワークステーションX68000でこのマンデルブロー集合をカラーで表示するプログラムが紹介された、これが結構なスピードで表示される（後から考えたら単純に計算済みの画像を表示しているだけだと思う）のを見て、自分のパソコンでも表示できればやってみたいと思ったが、手元にあるパソコンは親父が道楽で買ったPC9801でX68000ではなかった。

[![パソコンサンデー](http://img.youtube.com/vi/f6R4T7bYG9k/0.jpg)](https://youtu.be/f6R4T7bYG9k?t=382)

探してみたらパソコンサンデーの最終回がyoutubeに在った。
6:22秒あたりにフラクタル映像が出ている、実際に初めてマンデルブロー集合の画像を見たのはこの回ではなく、投稿プログラムでの発表の回だった記憶だったが、その回は見つけられなかった。この映像が自宅のパソコンでも表示できるのではないかと思って感動したのだけど、その当時では無理だった。まだ小学生の頃だし。

雑誌IOに載っていたマンデルブロー計算
=============
その後、パソコンサンデーから5年程経った頃だったと思うが、当時パソコン雑誌IOに掲載された9801対応のマンデルブロー集合表示プログラムが目に留まり、実際に動かしてみることになる。
で、動かした結果がえっっらい時間がかかる、計算開始して一晩寝かした後の夕方、もう計算ができただろうと思ってディスプレイの電源入れてみたら（PCは電源入れっぱなしだったが、当時PCが置いてあった居間でディスプレイ入れっぱなしは憚られたのでディスプレイのみ電源切っていた）当時の解像度640x400の画面左側に短冊状の画像が表示されているだけで、一晩では計算が終わらなかったのを記憶している。
結果的に4，5日かかってそれでも右側の最後まで計算は終わらなかったけど、何となく全体的な例の黒い玉が重なった所は表示されたのでまぁいいやと、プログラムを落した。
調べてみたら、現在でも元気に刊行されていた
https://www.kohgakusha.co.jp/io/
でも、自分が実行したプログラムが掲載された号までは突き止められなかった。
多分９０年代前半で、当時は５インチのフロッピーディスクが付録として付いてきて曲がらないように段ボールで補強された封筒にフロッピーディスクが封入されていた。そのフロッピーに収録されていた。

フラクタルズームとメガデモ
=============
それから2年ぐらい後、何故か自分の周りでメガデモがなぜか流行りだしその中でTritionのCryastal Dream２の中でフラクタルズームをデモる。以前えらい計算量がかかる事を体感している身としてはどうやってマンデルブロー集合をリアルタイムにムービーの様に計算しているのか度肝を抜かれた。結果としてはホントのムービーで、リアルタイムで計算してたんじゃなくて独自フォーマットでムービーを再生していたのではないかと、仲間内では話していた記憶。その当時同時に技術的に尖ったデモだったのが2ndrearityだった。こちらは３ｄのデモで当時３ｄをハードウエアで実現する物はＳＧＩの高価なハードぐらいしか存在せず、ソフトウエアで３ｄを再現するのは現実的では無かった所でintel386がメジャーの中でテクスチャーマッピングを使用した３ｄ表示を行うデモを行っていた。
この1，2年後にdirectXの初期のバージョンが始まり、それと同じような時期に3dfxのvoodooが出回るようになり、最初は暫くGlide採用の3DのMS-DOSでのゲームが流行りだす。
当時メガデモのプログラムをインターネット越しに拾うのに苦労してたら（144のモデムで繋いでいた）、秋葉原のコムサテライトで外国人のにーちゃんがHornetUndergroundのCD（メガデモを集めたCD）売ってるとの話を聞いて買いに行ってた記憶、本当ににーちゃんがCD売っていた。あの人誰だったんだろうな。

フラクタルズームのデモが再生された動画もyoutoubeで見つけることが出来た。

[![フラクタルズーム](http://img.youtube.com/vi/3jyTysTORNQ/0.jpg)](https://youtu.be/3jyTysTORNQ?t=195)

コレの3:15辺り、この映像をi386のPCで動かしていたんだからすごいなと思う。

Second Realityは有名なので直ぐ見つけることが出来た
[![second reality](http://img.youtube.com/vi/rFv7mHTf0nA/0.jpg)](https://www.youtube.com/watch?v=rFv7mHTf0nA)

当時ハードウエアが全然無い環境でCPUのみの計算でコレが出来ているのが凄かった。

FinalReality
=============
その後暫くしたら世の中はDosからwindowsが主流になって、ゲームライブラリWinGがあったりその後DirectXがやってくる。
色々あったけどwindowsでゲームを動かすのならDirectXがスタンダードになってきた頃にFInalReaLityがパソコンショップでよくデモっている事が多くなる。秋葉原のドスパラとかで良く見た記憶。コレを作ったのが2ndrealityを作っていた人たちだったとの事を後に知って納得した記憶
その後FInalrealityを作っているところがその後FutureCrewとなり、今も続く3DMarkの開発元として続いている。

計算量
=============
マンデルブローの計算は小数点が利用されるので本来は浮動小数点計算で比べるのが正しいのだけど、PC98のCPUである8086(V30)の計算は浮動小数点では計算されずに固定小数点計算だと思うのでMIPS値でどれくらい計算能力の差があるかを調べてみる。

https://www.sanosemi.com/history_of_Intel_CPU_techspecs-mini.htm
を見ると表が出ているので
当時のV30は10Mhzの8086のNECカスタマイズなのでだいたい
####0.75MIPS
フラクタルズーム時代のCPUは良いCPUでも386なのでその中でも最良の33MHzの
####11.4MIPS

…….で、現在の手元のCPUがi7 6700だけど、見つけたMIPS値の記録がそのひとつ前のi7 4770しか見つからなかったので参考値だが、
https://ja.wikipedia.org/wiki/MIPS
から参考に
####133740MIPS

単純計算で178320倍までPC-9801の時代から跳ね上がった事になる。
多分浮動小数点計算はそれ以上の飛躍があると思う。（当時の浮動小数点計算は泣きたくなるぐらい遅くてしかも、別途浮動小数点計算用コプロセッサを購入しなくてはいけなかった）
↓試しにマンデルブローを表示するプログラムを拾ってきて表示してみたが、1秒かからずに以下の画像が表示された。現在ならリアルタイムに計算してフラクタルズームを表示できるね。


計算してみて表示してみたのがこの画像。

![gazo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/908163/ccc13f5b-f7b4-2d4f-e6d6-ef7e49bb3c03.png)

この画像を見るためにPC9801時代は１週間ぐらいかかったと思う。