【发布时间】:2012-09-14 23:11:48
【问题描述】:
我正在开发 Mandelbrot screensaver 的新版本,但浮点精度已用完 - 简单的 double 值没有足够的有效数字来满足我的需要。
更重要的数字 = 更高级别的分形放大
当我在 Delphi 7 中编写此屏幕保护程序的版本时,我使用了 extended 浮点类型,大小为 80 位。
在 .NET 中,我可以切换到 decimal,但这对性能的影响非常糟糕,分形生成速度减慢了 20 倍左右。
.NET 是否有任何相当于 extended 的功能?或者,是否有任何精度高于 double 的数值类型仍然使用 FPU 进行评估,因此没有 decimal 的高性能? p>
更新
我的屏幕保护程序已经设法将分形放大许多(许多!)数量级;目前,仅当使用的数字类型无法分隔相邻像素的纵坐标时,它才会重置为基本分形。双扩展改进带来的额外 16 位精度将使我的大小增加近 16 倍。
就性能而言,我的算法已经设法消除了所需的 95-99% 的数学运算(与计算许多像素的简单实现相比),同时保留了分形的完整性。
【问题讨论】:
-
您可能需要为此编写本机代码,因为扩展使用 x86 中的 80 位浮点寄存器。或者我不确定是否可以减少程序对更精确的渴望。我不是这方面的专家,所以我无法提供任何进一步的建议。
标签: c# performance double floating-point-precision