解释为什么 C++ 和 C# 对双精度类型具有不同的最大值?

Explanation of why C++ and C# have a different maximum value for type double?

本文关键字:最大值 类型 C++ 为什么 双精度 解释      更新时间:2023-10-16

在 C# 中,双精度类型的最大值为:1.79769313486232E+308。

但是,在 C++ 中,双精度类型的最大值为:1.79769e+308。

这意味着C++程序(使用 strtod 函数)不能总是解析由 C# 输出的双精度类型值。

对这种行为有什么解释和处理这个问题的好解决方案吗?

从 C++/C# 与浮点数和双精度数的差异

C++允许程序保留更高的精度用于临时 结果比子表达式的类型所暗示的要好。一件事 可能发生的是中间表达式(或未指定的 它们的子集)计算为扩展的 80 位浮点数。

更多信息浮点计算中的精度和准确度

引用 埃里克·利珀特

的话

C# 规范的第 4.1.6 节,以浮点开头 可以以比结果类型更高的精度执行操作 的操作。例如,某些硬件体系结构支持 "扩展"或"长双"浮点类型,范围更大,并且 精度比双精度型,并隐式执行所有 使用此更高精度类型的浮点运算。。。。**看 规范以获取更多详细信息。