例如:
assert(atof("1.2") == 1.2);
Run Code Online (Sandbox Code Playgroud)
不管使用什么浮子?
我知道浮点精度并不精确,但它精确到不精确,二进制的舍入产生完全相同的双精度?
Eri*_*hil 29
C标准无法保证这一点.在源代码中转换浮点文字的语义在C 2011 [draft 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中规定.该子句有一些推荐的准确性实践,但对于匹配文字的翻译时转换没有提及.