用于测试目的:"special"哪些浮点数(IEEE754 32b)?
For testing purposes: which floating point (IEEE754 32b) numbers are "special"?
我计划更详细地测试跨平台 SIMD 库。
作为其中的一部分,我想确保我测试了许多浮点数的极端情况,以确保行为一致。
我只能想出一些,比如
零- 和负零,
- 正负无穷大,
- 多个版本的 NaN,
- 非规范化数字
现在,尤其是最后两点让我头疼:我甚至不确定我是否理解使(32b)浮动NaN的二进制表示,更不用说不同类型之间的区别了(似乎有三个,安静,信号和"普通"NaN,但我真的不确定它们是否有自己的表示)。
此外,非规范化数字是指数全零,尾数非零。
有没有办法以编程方式生成所有这些特殊数字(好的,+zero 很容易,只需将 32 位 0-int 解释为浮点数)?我正在开发一个 C(99) 和 C++(11) 库,所以任何一个都可以。
哪个浮点数(IEEE754 32b)是"特殊的"?
零
- 和负零,
- 正负无穷大,
- 多个版本的 NaN,
- 非规范化数字
差不多就是这样,虽然没有"普通"的楠。其他可能对测试很重要的数字:所有连续整数都无法准确表示的值范围。将产生特殊值的值对。最小(正常)和最大正可表示值。
有没有办法以编程方式生成所有这些特殊数字
有些很容易用std::numeric_limits
生成。它具有静静楠、信号楠、无穷大、最小正态和不正态的成员函数。
其他(例如具有任意有效负载的 nan)可以使用uint32_t生成,其位掩码与 IEEE 规范匹配,可以在浮点上memcpy
。请注意,可能存在整数和浮点字节序不同的模糊系统,在这种情况下,位掩码将不是人们所期望的。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 使用提升将数据从 PyObject 复制到浮点数 *
- 使用浮点数和双精度数的非常小数字的数学
- 使用英特尔内联函数将打包的 8 位整数乘以浮点数向量
- 如何在 c++ 中将小数点后两位数的浮点数分配给另一个浮点数
- 返回浮点数的小数位数
- txt 文件中浮点数的最大和最小值
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 将浮点数转换为无符号字符数组并打印出来
- 如何将时间字符串 (M:SS) 转换为浮点数
- 如何将浮点数(*)[6]转换为浮点**类型?
- C++将浮点数乘以分数
- 如何将浮点数转换为uint8_t?
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- 在数学上将浮点数四舍五入到 N 位小数
- Cython通过浮点数的最快方式,用于高频控制回路
- 用于测试目的:"special"哪些浮点数(IEEE754 32b)?