float浮点数据类型近似存储的典型值示例有哪些?
典型可体现float近似存储特性的数值示例
float(遵循IEEE 754标准的单/双精度浮点数)的近似存储特性本质是二进制小数无法精确表示所有十进制小数,部分数值存储时就会出现偏差,只是多数编程语言的默认输出逻辑会隐式做舍入,导致开发者感知不到。你提到的100.15测试时看起来和存入值一致,就是因为它的存储偏差极小,小于默认输出的6-10位小数的精度阈值,舍入后和原始值重合,输出15位以上小数就能看到偏差。
以下是几个极易复现、偏差足够明显的典型数值:
- 0.1 + 0.2 运算结果
这是最广为人知的浮点数精度问题示例,在所有遵循IEEE 754标准的环境中,0.1 + 0.2的运算结果不会等于0.3,实际输出为0.30000000000000004。MSDN文档表述:“近似数值数据类型不会为多数指定数值存储精确值,仅存储与该值极为接近的近似结果”
- 小于1的常见十进制小数(如0.1、0.2、0.3、0.7等)
这类小数的二进制表示是无限循环序列,float无法精确存储,输出足够多的小数位即可看到偏差。比如打印20位精度的0.7,结果为0.69999999999999995559,而非精确的0.7。 - 超过2^53的大整数
双精度float可精确表示的整数上限为2^53(即9007199254740992),超过该范围的连续整数无法被精确区分,比如9007199254740992 + 1在float中存储的结果和9007199254740992完全相等。 - 极小精度差的等价数值
精度差距小于float最小精度单位(ULP)的两个数值会被识别为同一个值,比如1.0 == 1.0000000000000001的判断结果会返回true,二者在float中存储的二进制内容完全一致。
内容的提问来源于stack exchange,提问作者variable
相关产品推荐
相关产品推荐

