7

マンデルブロー スクリーンセーバーの新しいバージョンに取り組んでいますが、浮動小数点の精度が不足しています。単純なdouble値では、必要な有効数字が十分に得られません。

より有効な数字 = フラクタルへのより高いレベルのズーム

Delphi 7 でこのスクリーンセーバーのバージョンを作成したとき、サイズが 80 ビットの拡張浮動小数点型を使用しました。

.NET では、 decimalに切り替えることができましたが、これによるパフォーマンスへの影響はひどく、フラクタル生成が 20 倍ほど遅くなります。

extended for .NETに相当するものはありますか? または、代わりに、 doubleよりも精度の高い数値型で、評価に FPU を引き続き使用しているため、 decimalの高性能ヒットがないものはありますか?

アップデート

私のスクリーンセーバーは、フラクタルを何桁も (何倍も!) 桁違いに拡大することができました。現在、使用中の数値タイプが隣接するピクセルの縦座標を分離できない場合にのみ、基本フラクタルにリセットされます。2 倍に拡張された改善による 16 ビットの追加の精度により、サイズが 16 倍近くになります。

パフォーマンスに関しては、フラクタルの完全性を維持しながら、(多くのピクセルを計算する単純な実装と比較して) 私のアルゴリズムは、必要な数学の 95 ~ 99% を既に排除しています。

4

1 に答える 1

4

64ビットプラットフォームでは、ExtendedタイプはDoubleのエイリアスであり、わずか8バイトです。32ビットプラットフォームでは、Extended数値は10バイト(80ビット)として表されます。

つまり、Delphiプログラムでさえ64ビットプラットフォームではうまく機能しない可能性があります。

64ビットを超える数値データ型が必要な場合はdecimal、アルゴリズムを最適化してパフォーマンスを向上させてください。

于 2012-09-23T01:35:34.083 に答える