我正在处理Mandelbrot screensaver的新版本,而且我的浮点精度不足 - 简单的double值没有足够的重要数据来满足我的需求。
更重要的数字=更大程度的放大分形
当我在Delphi 7中编写这个屏幕保护程序的版本时,我使用了extended浮点类型,大小为80位。
在.NET中,我可以切换到decimal,但是这对性能的影响非常糟糕,分形生成速度减慢了20倍左右。
.NET的扩展是否相同?或者,是否有任何数字类型的精度高于 double 仍然使用FPU进行评估,因此没有十进制的高性能?
更新
我的屏幕保护程序已设法按许多(很多!)数量级缩放分形;目前,只有当使用的数字类型无法分隔相邻像素的纵坐标时,它才会重置为基础分形。从双倍扩展的改进中得到的额外16位精度将使我的尺寸增加近16倍。
至于性能,我的算法已经设法消除了所需数学的95-99%(与计算许多像素的简单实现相比),同时保留了分形的完整性。
答案 0 :(得分:4)
在64位平台上,
Extended
类型是Double的别名,其中 只有8个字节。在32位平台上,Extended
数字表示为10个字节(80位)。
这意味着即使您的Delphi程序在64位平台上也可能表现不佳。
如果您需要超过64位的数字数据类型,请转到decimal
并优化算法以提高性能。