对于强烈的数字运算,我正在考虑使用固定点而不是浮点数。当然,固定点类型的大小,它将运行在什么CPU上,如果我可以使用(对于英特尔)MMX或SSE或者出现任何新的东西,那将是多少字节......

我想知道如果浮点运行速度比以往任何时候都快,是否值得考虑固定点?是否有一般的经验法则,我们可以说它的重要性超过百分之几? 35,000英尺数值性能的概述是什么? (顺便说一句,我假设大多数计算机都有通用CPU,而不是DSP或专用嵌入式系统。)

有帮助吗?

解决方案

它仍然值得。浮点比过去快,但定点也是。如果您关心IEEE 754所保证的精度,那么修复仍然是唯一的方法。

其他提示

在处理大量数据的情况下,固定点可以是内存效率的两倍,例如:一个四字节长的整数,而不是一个八字节的双整数。通常在大型地理空间数据集中使用的技术是将所有数据减少到共同的原点,使得最高有效位可以被处理掉,并且对于其余部分使用定点整数。浮点只有在点确实浮动时才重要,即您正在以非常高的精度处理非常广泛的数字。

使用固定小数的另一个好理由是舍入更加简单和可预测。大多数财务软件使用固定点任意精度小数,半舍入舍入来代表货币。

它几乎总是更快地使用定点(x86,pentium,68k和ARM的经验)。但是,它也可以取决于应用程序类型。对于图形编程(我的固定点的主要用途之一),我已经能够使用预构建的余弦表,日志表等来优化代码。但是基本的数学运算也证明更快。

对财务软件的评论。在之前的回答中说,固定点对于财务计算很有用。根据我自己的经验(开发大型资金管理系统和丰富的信用卡处理经验),我不会使用固定点。使用浮点或固定点会出现舍入误差。我们总是使用全部金额来表示货币金额,计算可能的最小金额(欧元或美元为1c)。这确保不会丢失部分金额。执行复杂计算时,值将转换为双精度值,应用特定于应用程序的舍入规则,并将结果转换回整数。

当硬件不支持浮点或硬件实现很糟糕时使用定点。

在为它制作课程时也要小心。由于(非)必要的类副本,你认为快速的东西实际上可能会变成一只狗。不过,这是另一个问题。

使用定点的另一个原因 ARM 设备,如手机和平板电脑,缺少FPU(至少其中很多)。

对于开发实时应用程序,使用定点算法优化函数是有意义的。有一些FFT(快速傅立叶变换)的实现,非常重要的图形,它的依据浮点运算的效率的改进。

由于您使用的是通用CPU,我建议不要使用固定点,除非性能对您的应用程序如此重要,否则您必须计算每个tic。当你拥有一个可以为你完成它的CPU时,实现定点和处理溢出等问题的麻烦是不值得的。

恕我直言,只有在使用没有硬件支持的DSP进行浮点运算时才需要定点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top