5年ほど前、このブログで 虚数のテトレーション という記事を書いたことがある。 テトレーション(tetration) とは、自らのべき乗を指定された回数反復する演算のことで、 n a  と表現する。 3 5 の場合、5 5 5  = 1.911×10 2185  となる。Pythonの関数で表現すれば以下のようになる。     以前の記事では、 ∞ i  が 0.43828+0.36059 i  に収束することを見つけたのだが、今回はそれに関連したフラクタルについて紹介したい。   テトレーション n a  の a  には複素数を指定することができる。このとき、 a = x + yi  として、それを複素平面に置く。ここで正の整数 n を大きくしていき、発散と判定された n に対応した色で平面を色分けする。発散しない場合、予め決めておいた n の上限値を使う。これで得られる図を テトレーション・フラクタル(tetration fractal) と呼ぶ。   n (x + yi) = a + bi としたとき、 n +1 (x + yi) = a' + b'i  は以下のように計算できる。        Pythonでの実装は ActiveSate Code に Tetration Fractal として載っている。今回はこれを少し修正したコード、C++で書いたコード、更にTBBで並列化したコードを用意して、それらの実行速度のベンチマークを取ってみた。           Python      C++      C++ with TBB            258.732秒      16.999秒      0.976秒       ここで、複素平面の領域は(-1.5, 0)-(-0.75, 0.75)であり、最大繰り返し数は256としている。画像の大きさは1,024×1,024とした。実行環境はIntel Xeon X5650の2CPUで、12コア・24スレッドとなっている。   以下に、ソースコードを示す。詳細についてはコードを読んでいただきたい。    Pythonによる実装:   % ./tetration.py tetration.png -1.5 0.0 0.75 0.75 1024 1024     C++による実装:   % ...