任意精度小数算术中的浮点数与有理数 (C/C++)

2023-12-25

由于实现 AP 分数的方法有两种,一种是模拟 AP 的存储和行为double数据类型,仅具有更多字节,另一种是使用现有的整数 APA 实现将小数表示为有理数,即表示为一对整数、分子和分母,这两种方式中哪一种更有可能提供高效的算术在性能方面? (内存使用确实是次要问题。)

我知道现有的 C/C++ 库,其中一些提供带有“浮点数”的小数 APA,另一些提供有理数(但是,它们都不具有定点 APA),当然我可以对依赖于“的库进行基准测试” float”实现与利用合理实现的实现相对比,但结果很大程度上取决于那些特定库的实现细节,我必须从近十个可用库中随机选择。所以更多的是理论的我感兴趣的两种方法的优缺点(如果考虑定点 APA,则为三种方法)。


问题是你的意思是随意的您在标题中提到的精度。这是否意味着“任意,但在编译时预先确定并在运行时固定”?或者它是否意味着“无限,即在运行时可扩展以表示任何有理数”?

在前一种情况下(精度可在编译时自定义,但随后修复),我想说最有效的解决方案之一实际上是定点算术(即您提到的两个都不是)。

首先,定点运算不需要任何专用库来进行基本算术运算。它只是一个叠加在整数算术上的概念。这意味着,如果您确实需要点后很多数字,则可以使用任何大整数库,将所有数据(例如,乘以 2^64)基本上立即得到点后 64 个二进制数字的定点算术。点(至少涉及算术运算,并对乘法和除法进行一些额外的调整)。这通常比浮点或有理数表示更有效。

另请注意,在许多实际应用中,乘法运算通常伴随着除法运算(如x = y * a / b)相互“补偿”,这意味着通常不需要对此类乘法和除法进行任何调整。这也有助于提高定点运算的效率。

其次,定点运算在整个范围内提供统一的精度。对于浮点或有理表示来说,情况并非如此,在某些应用程序中,这可能是后两种方法的一个重大缺点(或者是一个优点,具体取决于您的需要)。

那么,为什么你只考虑浮点和有理表示。有什么因素阻止您考虑定点表示吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

任意精度小数算术中的浮点数与有理数 (C/C++) 的相关文章

随机推荐