例如:
assert(atof("1.2") == 1.2);
无论使用哪种浮子?
我知道浮点精度不是精确的,但是恰恰是不精确的,所以四舍五入到二进制是否会产生完全相同的double?
C标准不保证这一点。在C 2011 [草案N1570] 6.4.4.2中指定了在源代码中转换浮点文字的语义。这表示建议(但不是必需)的做法是,浮点常量的转换时转换应与库函数(如)的字符串执行时转换相匹配strtod
。
不仅如此,该标准甚至不需要将具有相同数学值的两个不同文字(例如1.23
和1.230
)转换为相同的值。这些示例来自标准的脚注75,该脚注是一段的脚注,指出同一源格式的所有浮点常量都应转换为相同的值。因此,1.23
始终将其转换为源中出现的相同值,但1.230
不一定转换为与1.23
或相同的值123e-2
。即使123e-2
和123e-02
可能会有所不同。
atof(p)
在7.22.1.2中指定为,strtod(p, (char **) NULL)
除了它们在错误中的行为方式相同。strtod
在7.22.1.3。中指定。该子句有一些推荐的做法,以确保准确性,但未提及匹配文字的翻译时转换。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句