gpt4 book ai didi

c++ - 任意精度小数运算中的 float 与有理数 (C/C++)

转载 作者:可可西里 更新时间:2023-11-01 15:52:34 26 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

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

所以,再一次,你为什么只考虑浮点和有理数表示。有什么东西阻止你考虑定点表示吗?

关于c++ - 任意精度小数运算中的 float 与有理数 (C/C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11798640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com