考虑精确的浮点值在0.3附近
1) 0.2999999523162841796875
2) 0.2999999821186065673828125
3) 0.300000011920928955078125
4) 0.3000000417232513427734375
5) 0.30000007152557373046875
当我们用C ++编写以下代码时
auto x = 0.30f
编译器必须解析0.30f
令牌,并使float类型的x的值为0.300000011920928955078125
。 (以上选项3)
我很好奇编译器如何达到该值,而不是其周围的值。一种理论是,他们调用strtof
函数来获取浮点数。 Here是strtof的实现(基本上是通过字符串的每个字符,乘以10的幂,然后找出小数的位置)。对我来说,这种方法为什么会给出选项3而不是选项4或5并不为人所知。
请考虑精确的浮点值0.3左右)0.2999999523162841796875 2)0.2999999821186065673828125 3)0.300000011920928955078125 4)0.3000000417232513427734375 5)0.30000007152557373046875当...
一种理论是,他们调用strtof函数来获取浮点数。