任意算术类型的比较:有人知道实现吗?

Comparisons of arbitrary arithmetic types: does anyone know an implementation?

本文关键字:实现 类型 比较 任意算      更新时间:2023-10-16

在编写几个数学实用程序时,我偶然发现需要实现可以在任意两个基本算术类型之间执行比较的通用实用程序。当我开始编码时,很明显,这个操作并不像看起来那么简单,因为我需要正确处理极端情况,特别是当类型具有不同的精度时,即类型之间转换期间的舍入策略变得很重要。考虑:

float a1 = 4.8f;
int a2 = 4;
assert(a2 != (int) a1); //fails erroneously since we truncated a1
float b1 = 40000000.0f; //can represent only 40000000 and 40000004 accurately
long b2 = 40000002;
assert(b1 != (float) b2); //fails erroneously since we now truncated b2

以上可以使用c++0x类型特征来实现,根据提供给比较函数的模板参数自动选择合适的算法。然而,这是非常复杂的,并且有很多地方可能出现漏洞,所以我不认为自己发明所有东西是值得的。有人知道正确实现上述功能的库吗?

您可以在http://gmplib.org/查看GNU的MP Bignum库。从他们的页面:

GMP是一个免费的库,用于任意精度的算术运算有符号整数、有理数和浮点数。在那里对精度没有实际的限制吗运行GMP的机器的可用内存。GMP拥有丰富的一套函数,并有一个正则的函数接口。

GMP是精心设计的,以尽可能快,既小操作数和大操作数。速度是通过使用实现的全文作为基本算术类型,通过使用快速算法,与为最常见的内循环高度优化的汇编代码很多cpu,并且一般强调速度。