【发布时间】:2012-08-03 15:23:37
【问题描述】:
由于AP小数有两种实现方式,一种是模拟double数据类型的存储和行为,只需要更多字节,另一种是使用现有的整数APA实现来表示一个分数作为有理数,即作为一对整数,分子和分母,这两种方法中哪一种更有可能在性能方面提供有效的算术? (内存使用真的是次要问题。)
我知道现有的 C/C++ 库,其中一些提供带有“浮点数”的分数 APA,而另一些则提供有理数(但是它们都没有定点 APA),当然我可以对一个库进行基准测试依赖于“浮动”实现而不是使用合理实现的实现,但结果将在很大程度上取决于那些特定库的实现细节,我必须从近十个可用的库中随机选择。因此,我感兴趣的两种方法(如果考虑定点 APA,则为三种)更理论上利弊。
【问题讨论】:
-
你真的需要一个浮点数吗?浮点通常是指提供非均匀精度的表示:在
0周围更加“集中”,随着我们远离0而下降,并且在范围的远端出现灾难性的“稀疏”。你真的需要这个属性吗?还是您只是使用 floating-point 作为任何小数的通用术语?换句话说,为什么不考虑定点算术? -
@Desmond Hume:正如我在回答中所说,没有定点库的原因是定点不需要专用的“定点”库。定点算术只是在所有数据都乘以某个常数因子(稍作调整)之后的整数算术。换句话说,任何大整数库(同样:关键字是 integer)同时用作固定宽度小数库。
-
@DesmondHume:定点只是分数/有理数的特例/优化。
-
@AndreyT:至少有一个固定点 wrapper 肯定是有好处的。定点的乘法/除法不只是将它们相乘。 (还有 IO 和转化等)
-
顺便说一句,浮点数也是有理数,分母被限制为 2 的幂,这使得归一化变得便宜(移位而不是除以 gcd)。
标签: c++ c performance floating-point arbitrary-precision