考虑围绕0.3的精确浮点数值。
编译器必须解析
我很好奇编译器是如何得出这个值,而不是其周围的值。有一种理论是它们调用
1) 0.2999999523162841796875
2) 0.2999999821186065673828125
3) 0.300000011920928955078125
4) 0.3000000417232513427734375
5) 0.30000007152557373046875
当我们在 C++ 中编写以下代码时:
auto x = 0.30f
编译器必须解析
0.30f
这个标记,并将x的类型设置为float,值为0.300000011920928955078125
。(以上第3种选项)我很好奇编译器是如何得出这个值,而不是其周围的值。有一种理论是它们调用
strtof
函数来获取浮点数。这里是strtof的实现(它基本上遍历字符串中的每个字符,乘以10的幂并确定小数点的位置)。 我不明白为什么这种方法会给出第3个选项,而不是第4或第5个选项。