C#中是否有类似于"extended"的等效项?

7
我正在开发一个曼德博集合屏保的新版本,但浮点数精度不够用 - 简单的double类型对我的需求来说没有足够的有效数字。
更多有效数字 = 更大的分形缩放级别
回到我在Delphi 7中编写该屏保的时候,我使用了80位大小的extended浮点类型。
在.NET中,我可以切换到decimal,但这会带来可怕的性能影响,将分形生成速度减慢约20倍。
有没有.NET的扩展等效物?或者,是否有比双精度浮点数精度更高但仍使用FPU进行评估并因此不具有十进制数的高性能损失的数字类型? 更新 我的屏幕保护程序已经成功将分形缩放多个(很多!)数量级;当前仅当使用的数字类型无法分离相邻像素的纵坐标时,它才会重置为基本分形。来自双倍扩展改进的额外16位精度将使我获得接近16倍的大小。
至于性能,与计算许多像素的天真实现相比,我的算法已经成功消除了95-99%的所需数学运算,同时保留了分形的完整性。

你可能需要编写本地代码,因为扩展使用了x86中的80位浮点寄存器。或者我不确定是否可以减少程序对更高精度的需求。我不是这方面的专家,所以无法提供进一步的建议。 - nhahtdh
1个回答

4
在64位平台上,Extended类型是Double的别名,仅有8个字节。在32位平台上,Extended数字表示为10个字节(80位)。这意味着即使您的Delphi程序在64位平台上可能表现不佳。如果您需要超过64位的数字数据类型,则可以选择decimal并优化算法以提高性能。

同意。我认为计算高分辨率Mandlebrot渲染不需要更多的绝对精度(这一事实已被证明,因为有许多程序可以在非常快的速度下无限深入)。我认为OP只需要考虑以不同的方式解决问题。 - Dai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接