将字符串转换为双精度等于文字双精度吗?

彼得·汉森(Peter Hansen):

例如:

assert(atof("1.2") == 1.2);

无论使用哪种浮子?

我知道浮点精度不是精确的,但是恰恰是不精确的,所以四舍五入到二进制是否会产生完全相同的double?

埃里克(Eric Postpischil):

C标准不保证这一点。在C 2011 [草案N1570] 6.4.4.2中指定了在源代码中转换浮点文字的语义。这表示建议(但不是必需)的做法是,浮点常量的转换时转换应与库函数(如)的字符串执行时转换相匹配strtod

不仅如此,该标准甚至不需要将具有相同数学值的两个不同文字(例如1.231.230)转换为相同的值。这些示例来自标准的脚注75,该脚注是一段的脚注,指出同一源格式的所有浮点常量都应转换为相同的值。因此,1.23始终将其转换为源中出现的相同值,但1.230不一定转换为与1.23相同的值123e-2即使123e-2123e-02可能会有所不同。

atof(p)在7.22.1.2中指定为,strtod(p, (char **) NULL)除了它们在错误中的行为方式相同。strtod在7.22.1.3。中指定。该子句有一些推荐的做法,以确保准确性,但未提及匹配文字的翻译时转换。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档