マンデルブロにハマっているのか、プログラミングにハマっているのか。とにかくそんなことで、今回は超拡大にチャレンジしてみた。
この拡大を動画にしているので、興味のある人は、以下のyoutubeを御覧ください。
フラクタルは何倍に拡大しても同じような画像
下の画像は渦巻きの一部を38溝倍(
参考:大きな数字(万から順に1万倍していった単位)
万(まん)、億(おく)、兆(ちょう)、京(けい、きょう)、垓(がい)、𥝱(じょ)、穣(じょう)、溝(こう)、澗(かん)、正(せい)、載(さい)、極(ごく)、恒河沙(ごうがしゃ)、阿僧祇(あそうぎ)、那由他(なゆた)、不可思議(ふかしぎ)、無量大数(むりょうたいすう)
繰り返し計算
マンデルブロは無限に拡大できるという。それならということで、プログラムを作成し、拡大して行くと、途中で図形がなまってくる。
マンデルブロでは繰り返し計算をして
とはいっても実際に無限回の計算はできないので、適当な回数、たとえば200回とかで打ち切っている。ところが拡大していくと、200回では発散せずにもっと大きな繰り返しで発散するというケースが多くなってくる。このため正確に描画するためには、この繰り返し数を大きくしていかねばならない。
今回の超拡大では一つの点について最大4700万回の繰り返し計算を行っている。このため、倍率を上げるとともに、計算時間がどんどん長くなっていく。今回の拡大では速く発散する領域を選択した。別の領域で同じことをしようとすると、一つの画像を描画するのに何時間も待たされることになる。
倍精度浮動小数点演算の限界
そして次の課題が計算誤差。拡大するということは、非常に小さな領域について計算することであるが、拡大率があまりに大きいと、画像の隣の点と区別ができなくなる。
倍精度浮動小数点の仮数部は52ビット。十進数では15桁しかない。拡大率が
そこで一兆倍の限界を突破するために、マンデルブロ専用の数値クラスを作成した。2つのlong整数を使って小数点以下を120ビットまで表現できるようにしたのである。結果として、
最初に掲載した動画で、スムーズな拡大が一兆倍どまりなのはこのためである。それ以降は、専用数値クラスを使って演算したため、一枚の画像に5分も10分もかかり、動画にすることはできなかった。
渦巻きギャラリー
ということで一兆倍を超える渦をギャラリーにしてみた。
一兆倍
0 件のコメント:
コメントを投稿