このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
マンデルブロ集合での固定小数点計算と浮動小数点計算の比較
この例では、固定小数点数と浮動小数点数の違いを示します。違いを比較できるように、それぞれのデータ型を使用してマンデルブロ集合を計算します。詳細については、Stateflow チャートの固定小数点データを参照してください。
マンデルブロ集合は、次の数列が発散しない複素数 の集合です。
この例では、Stateflow® チャートで固定小数点計算と浮動小数点計算を使用して 2 つのマンデルブロ集合のイメージを作成します。このチャートは、起動すると補助関数 sf_mandel_gui
を呼び出し、表示を初期化して初期のピクセルと Figure の情報を取得します。その後、チャートは Figure 内のそれぞれの行と列を反復します。各 Figure のピクセルは複素平面における点を表します。
ピクセルの "x" 座標は複素数の実数部を表し、"y" 座標は虚数部を表します。チャートは、ピクセルごとにグラフィカル関数 mandel_fix
と mandel_double
を呼び出して、各ピクセルがマンデルブロ集合に含まれるかどうかを判定するために必要な反復回数を計算し、その数をカラーマップで色にマッピングします。Figure 内のすべてのピクセルを更新した後、チャートは Wait
ステートに入り、Figure ウィンドウでイメージをクリックして Figure にズームインするまでスリープします。
グラフィカル関数を使用したマンデルブロ集合の計算
関数 mandel_double
は、浮動小数点計算を使用して、点がマンデルブロ集合に含まれないかどうかを判定するために必要な反復回数を計算します。local_colors
の反復回数まで数列が発散しなければ、関数は点がマンデルブロ集合に含まれると判定します。
関数 mandel_fix
は固定小数点計算を使用します。a0
と b0
は、入力値から作成される固定小数点数値オブジェクトです。cn
は、語長と小数部の長さが a0
と b0
の 2 倍の固定小数点数値オブジェクトです。
固定小数点数値オブジェクトのプロパティは、[プロパティ インスペクター] の [固定小数点プロパティ] セクションで指定されます。チャートは、固定小数点数値オブジェクトの積と和に、負の無限大方向に丸める 2 の成分のオーバーフローを使用します。語長は 32、小数部の長さは 26 です。
fimath('OverflowAction','Wrap',... 'RoundingMethod','Floor',... 'ProductMode', 'SpecifyPrecision',... 'ProductWordLength', 32,... 'ProductFractionLength', 26,... 'SumMode', 'SpecifyPrecision',... 'SumWordLength', 32,... 'SumFractionLength', 26)
シミュレーションの実行
シミュレーションを開始するには、[実行] を押します。Figure ウィンドウで、"x" 軸に -2 から 1 までの区間、"y" 軸に -1.5 から 1.5 までの区間が表示されます。ピクセルの色は、mandel_fix
または mandel_double
で計算された反復回数に対応します。マンデルブロ集合に含まれる複素数に対応するピクセルは濃い赤です。濃い青のピクセルは、mandel_fix
または mandel_double
において、少ない反復回数で数列が発散したと判定されたことを示します。明るい色ほど、数列が発散するまでの反復回数が多いことを示します。
イメージの特定の部分にズームインするには、イメージ ウィンドウ内でクリックしてドラッグします。
固定小数点のイメージと double のイメージの違いを観察します。固定小数点のイメージには、浮動小数点計算に比べて精度が低いことに起因する誤検知が含まれています。mandel_fix
では、それぞれの計算で値の負方向の丸めを丸め手法として使用しています。反復回数が多くなると、最大反復回数のしきい値 4 を超える値 r2
がマンデルブロ集合に含まれない点で生成されず、その丸め誤差が丸めを繰り返すことによって累積的に発生します。
ズーム アウトするには、シミュレーションを再開します。シミュレーションは、[停止] をクリックするまで続行されます。