首页 > 解决方案 > 当给定相同的字符串输入时,`std::atof` 是否保证产生相同的输出?

问题描述

我正在从文件中读取双精度值作为字符串并用std::atof. 之后,我将这些值用作无序映射中的键。它似乎工作正常,但它保证在 100% 的情况下工作吗?

我问这个问题是因为如果你用它做任何算术运算,产生相同的双精度值是非常困难的。

std::atof如果多次给出相同的字符串值,是否保证产生完全相同的双精度值?

标签: c++doubleunordered-mapatof

解决方案


您可以DBL_DIG通过std::string. 通常DBL_DIG为 15,但这取决于您平台上使用的浮点方案。

这和你问的不太一样。例如,在某些平台上,可以在运行时更改浮点舍入模式,因此即使在程序执行期间您也可能会得到不同的结果。然后,您已经签署了零、次正规数和 NaN(以各种形式)来担心。

陷阱太多了。我不习惯使用浮点类型作为映射键。std::string将用作地图中的键会好得多。


推荐阅读