任意算术类型的比较:有人知道实现吗?
Comparisons of arbitrary arithmetic types: does anyone know an implementation?
在编写几个数学实用程序时,我偶然发现需要实现可以在任意两个基本算术类型之间执行比较的通用实用程序。当我开始编码时,很明显,这个操作并不像看起来那么简单,因为我需要正确处理极端情况,特别是当类型具有不同的精度时,即类型之间转换期间的舍入策略变得很重要。考虑:
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,并且一般强调速度。
相关文章:
- 使用简单类型列表实现的指数编译时间.为什么
- 实现有界基元类型的c++
- 根据C++标准的定义实现"is_similar"类型特征
- 为什么 std::lerp 不适用于任何已实现所需操作的类型?
- C ++类型特征:确保子类实现方法
- 为自定义打印调试实现传递任何类型的变量
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- 在 OpenCL 内核中实现半精度浮点数据类型
- 在头文件中使用opencv类型来实现未定义的标识符
- 如何实现对参数顺序不可知的std::same_as的广义形式(即对于两个以上的类型参数)
- 如何实现一个接受任何容器类型的函数
- 有没有一种方法可以使用SFINAE来检测一个类型是否实现了给定的抽象基类
- 实现类型类向量的元素
- 如何在 python 中实现 c++ 类型结构
- 我能否在 uint_fast64_t 和无符号长整型之间实现类型等效性
- 从Bloch的Effective Java in C++实现类型安全的异构容器(VS2010)
- SFINAE使用模板、专门化和实现类型擦除
- 使用的实现类型