当给定相同的字符串输入时,`std::atof` 是否保证产生相同的输出?
Is `std::atof` guaranteed to produce identical output when given identical string input?
我正在从文件中读取双精度值作为字符串并使用 std::atof
解析它们。之后,我将这些值用作无序映射中的键。它似乎工作正常,但它能保证在 100% 的情况下工作吗?
我问这个问题是因为如果你用它做任何算术运算就很难产生相同的双精度值。
如果多次给定相同的字符串值,std::atof
是否保证产生完全相同的双精度值?
您可以通过 std::string
往返一个有效数字为 DBL_DIG
或更少的数字。通常 DBL_DIG
是 15,但这取决于您平台上使用的浮点方案。
这与您的要求完全不一样。例如,在某些平台上可以在运行时更改浮点舍入模式,因此即使在程序执行期间您也可能会得到不同的结果。然后你要担心带符号的零、次正规数和 NaN(以各种形式)。
陷阱太多了。我不习惯使用浮点类型作为映射键。使用 std::string
作为地图中的键会好得多。
我正在从文件中读取双精度值作为字符串并使用 std::atof
解析它们。之后,我将这些值用作无序映射中的键。它似乎工作正常,但它能保证在 100% 的情况下工作吗?
我问这个问题是因为如果你用它做任何算术运算就很难产生相同的双精度值。
如果多次给定相同的字符串值,std::atof
是否保证产生完全相同的双精度值?
您可以通过 std::string
往返一个有效数字为 DBL_DIG
或更少的数字。通常 DBL_DIG
是 15,但这取决于您平台上使用的浮点方案。
这与您的要求完全不一样。例如,在某些平台上可以在运行时更改浮点舍入模式,因此即使在程序执行期间您也可能会得到不同的结果。然后你要担心带符号的零、次正规数和 NaN(以各种形式)。
陷阱太多了。我不习惯使用浮点类型作为映射键。使用 std::string
作为地图中的键会好得多。