ソフトの砂場(ビットカオス)

最終更新日:1999年1月3日

 整数の掛け算で、各ビットがどのような値になるか表示するプログラムを作ってみました。

ビットカオス ビット13の図

動作

 このプログラムは、二つの整数x, yを0から500まで変化させ、それぞれについてx^2 * yを計算し、その値のnビット目が0になるか1になるかを表示するものです。xを横軸、yを縦軸にとり、nビット目が0なら白、1なら黒で、座標(x, y)に点を打ちます。

 ビット0(最下位ビット)は、x, yが共に奇数の時だけ1になるので、自明の表示になります。しかしビット5あたりになると、下図(一部を抜粋)のように直観的でない図形の繰り返しになります。

ビットカオス ビット5の図

 さらに上位のビット8になると、下図のように怪しげな渦巻き模様が現れます。

ビットカオス ビット8の図

 このページの最初の図は、ビット13の図です。さらに上位のビットになると、この図の左下を拡大したものになっていきます。ビット16では、下図のように目がチカチカするような表示になります。

ビットカオス ビット16の図

実装

 このプログラムは、Yamada,Kさんが作成された、「Win32用 基本グラフィックス・クラスライブラリ GLIBW32 ver1.21」を使用しました。このライブラリは高度な機能を備えているのですが、ここでは最低水準を行くような利用方法になっています ^^;

// ビットカオスプログラム
// Copyright(c) 1999 H.Yamamoto
#include <iostream.h>
#include "glibw32.h"

main()
{
        const int scrSize = 500;
        int x, y, n;

        cout << "描画するビット(0〜31): ";
        cin >> n;

        ginit(scrSize, scrSize, WHITE);
        GRAPH g;
        g.window(0, 0, scrSize, scrSize);
        for (x = 0; x < scrSize; x++) {
                for (y = 0; y < scrSize; y++) {
                        if ((x * x * y) & (1 << n))
                                g.pset(x, y);
                }
        }
        gend();
        return 0;
}

ダウンロード

ファイル名 bitCaos.lzh
バージョン 1.0
ファイルサイズ 85Kバイト
OS Windows NT 4.0 (Windows 95/98でも動作すると思いますが未確認です)
アーカイブの内容 bitCaos.exe ... 実行形式
bitCaos.txt ... 簡単な説明
備考

雑感

 こんなに簡単な計算でも、このように不思議な図形を描画できることに感銘を受けました。なお、このプログラムは、[1]を参考に作成しました。

参考文献・リンク

  1. C.A.ピックオーバーコンピュータ・カオス・フラクタル, 白揚社, 1993
  2. Yamada,K, Win32用 基本グラフィックス・クラスライブラリ GLIBW32 ver1.21

ホーム