c++ - 当给定相同的字符串输入时, `std::atof` 是否保证产生相同的输出?

标签 c++ double unordered-map atof

我正在从文件中将 double 值作为字符串读取,并使用 std::atof 解析它们。之后,我将这些值用作无序映射中的键。它看起来工作正常,但它能保证在 100% 的情况下工作吗?

我问这个问题是因为如果您对其进行任何算术运算,则很难产生相同的 double 值。

如果多次给出相同的字符串值,std::atof 是否能保证生成完全相同的 double 值?

最佳答案

您可以通过 std::string 往返具有 DBL_DIG 或更少有效数字的数字。通常,DBL_DIG 为 15,但这取决于您的平台上使用的浮点方案。

这与您所要求的不太相同。例如,在某些平台上可以在运行时更改浮点舍入模式,因此即使在程序执行期间也可能会得到不同的结果。然后您就需要担心符号零、次正规数和 NaN(以各种形式)。

陷阱太多了。我不喜欢使用浮点类型作为 map 键。使用 std::string 作为映射中的键会好得多。

关于c++ - 当给定相同的字符串输入时, `std::atof` 是否保证产生相同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63778837/

相关文章:

c++ - 为什么我在 double 之间的比较失败了 C++

c++ - 避免 C++ 类中的内存泄漏

C++ 无序映射好数量的桶

c++ - QFileDialog:选择文件后添加后缀

c++ - 如果程序的内存消耗超过限制,如何让我的程序停止?

c++ - 为什么 TensorFlow 推荐 "functional style for constructing operations"?

java - 用某些小数创建 0.000..

c++ - 使用代码分析在 Visual Studio 2010 中查找未初始化的成员

java - Java 中 BigDecimal 和 double 的运算

c++ - 从函数返回 unordered_map 内的 unordered_map