【问题标题】:Any equivalent of "extended" for C#?C# 的任何等效“扩展”?
【发布时间】: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


【解决方案1】:

在 64 位平台上,Extended 类型是 Double 的别名,它 只有 8 个字节。在 32 位平台上,Extended 数字表示为 10 个字节(80 位)。

这意味着即使是您的 Delphi 程序也可能无法在 64 位平台上运行良好。

如果您需要超过 64 位的数字数据类型,请选择 decimal 并优化您的算法以提高性能。

【讨论】:

  • 同意。我认为您不需要更高的绝对精度来计算高分辨率 Mandlebrot 渲染(事实证明,有许多程序以非常快的速度接近无限深)。我认为 OP 只需要考虑以不同的方式解决问题。
猜你喜欢
  • 2014-01-18
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
相关资源
最近更新 更多