Optimization 这几天什么时候使用定点

Optimization 这几天什么时候使用定点,optimization,floating-point,performance,numerical,fixed-point,Optimization,Floating Point,Performance,Numerical,Fixed Point,对于密集的数字运算,我正在考虑使用定点而不是浮点。当然,如果我可以使用(英特尔)MMX或SSE或任何新出现的东西,那么定点类型的大小、它将在什么CPU上运行都将很重要 我想知道,在浮点运算速度比以往任何时候都快的今天,是否值得考虑使用定点运算?是否有一般的经验法则,我们可以说它的重要性超过百分之几?35000英尺的数值性能概述是什么?(顺便说一句,我假设在大多数计算机中都有通用CPU,而不是DSP或专用嵌入式系统。)这仍然是值得的。浮点运算比过去快,但定点运算也比过去快。如果您关心的精度超过IE

对于密集的数字运算,我正在考虑使用定点而不是浮点。当然,如果我可以使用(英特尔)MMX或SSE或任何新出现的东西,那么定点类型的大小、它将在什么CPU上运行都将很重要


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

这仍然是值得的。浮点运算比过去快,但定点运算也比过去快。如果您关心的精度超过IEEE 754所保证的精度,则“固定”仍然是唯一的选择。

由于您使用的是通用CPU,我建议不要使用“固定点”,除非性能对您的应用程序至关重要,您必须计算每个tic。当您有一个CPU时,实现固定点和处理溢出等问题的麻烦就不值得了,因为CPU会帮您解决这些问题


IMHO,只有在使用不支持浮点运算的DSP时,定点才是必需的。

使用定点小数的另一个很好的原因是,舍入更简单且可预测。大多数金融软件使用定点任意精度小数和半偶数舍入来表示货币。

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


为它上课时也要小心。由于类的(非)必要拷贝,当涉及到评测时,您认为可能很快的事情实际上可能会变成一只狗。不过,这是另一个问题。

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


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

在处理大量数据的情况下,定点的内存效率可以提高一倍,例如,一个四字节长的整数,而不是一个八字节的双精度整数。大型地理空间数据集中经常使用的一种技术是将所有数据减少到一个共同的原点,以便可以处理最重要的位,并处理其余的定点整数。只有当点确实是浮点数时,浮点数才是重要的,也就是说,您正在以非常高的精度处理非常广泛的数字

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


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

在我的例子(佣金计算)中,我们使用Java BigDecimal,它不完全是一个固定点,但非常接近。舍入规则确实是特定于应用的,但10次中有9次是半偶数。通过复杂的计算,您是指复利、税率或其他类似情况?对于账户中的金额加和减,固定不是最正确的方法吗?在这种情况下你会使用浮点数吗?在我所做的工作中,表查找是一个重要的考虑因素,其他许多人可能也需要这样做——这在浮点运算中是不实际的。这是一个很好的观点。了解一下现在哪些硬件不支持浮点运算会很有趣。现在看来,即使是一个破旧的破鞋带也会产生浮点数。。。8P(BTW,我在佛罗里达州穿凉鞋,所以我没有鞋带技术)@达伦:任天堂DS(我仍然认为有些新)不支持浮点通过硬件。这是我为之开发的唯一一款手持设备,但我猜许多其他手持设备也没有FPU。最近我与Blackfin ARM处理器有了一些业务往来,该处理器显然不支持硬件中的浮点运算,而在软件中进行此类计算,这相当昂贵。许多DSP(数字信号处理器)不支持浮点。关于“浮点”的评论很好浮点运算的一部分——让我大开眼界,这在回顾中非常明显。+1,您是否有任何用于验证不同体系结构的基准测试软件。我通过分析得出了相同的结论,但这是一项相当多的工作,结果只与我测试过的特定硬件有关。有兴趣了解使用ARM以及更常见的Intel和AMD的移动设备上的差异。非常正确。这也适用于实现确定性分布式实时仿真。IEEE-754实现中的细微差异可能导致极难发现的错误,其中相同的计算在不同的分布式系统上具有不同的结果,使他们陷入困境