C/C 中的最小双精度值

新手上路,请多包涵

是否有标准和/或可移植的方式来表示 C(++) 程序中的最小负值(例如使用负无穷大)?

float.h 中的 DBL_MIN 是最小的 数。

原文由 Will 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 707
2 个回答

-DBL_MAX 在 ANSI C 中,在 float.h 中定义。

原文由 dfa 发布,翻译遵循 CC BY-SA 2.5 许可协议

是否有标准和/或可移植的方式来表示 C(++) 程序中的最小负值(例如使用负无穷大)?

C 方法。

许多实现支持 +/- 无穷大,所以最负的 double 值是 -INFINITY

 #include <math.h>
double most_negative = -INFINITY;


是否有标准和/或便携式方式….?

现在我们还需要考虑其他情况:

  • 没有无穷大

简单 -DBL_MAX

  • 只有一个 无符号 的无穷大。

我希望在这种情况下,OP 会更喜欢 -DBL_MAX

  • 幅度大于 DBL_MAX 的非正常值。

这是一个不寻常的案例,可能不在 OP 的关注范围之内。当 double 被编码为一对 浮点 以实现所需的范围/进动时,(参见 double-double )存在最大 正常 double 并且可能是更大 的非正常.如果 DBL_MAX 应该指的是最大的 normal ,我已经看到了争论。

幸运的是,这种配对方法通常包含 -infinity,因此最负的值仍然是 -INFINITY


为了提高可移植性,代码可以沿用

// HUGE_VAL is designed to be infinity or DBL_MAX (when infinites are not implemented)
// .. yet is problematic with unsigned infinity.
double most_negative1 = -HUGE_VAL;

// Fairly portable, unless system does not understand "INF"
double most_negative2 = strtod("-INF", (char **) NULL);

// Pragmatic
double most_negative3 = strtod("-1.0e999999999", (char **) NULL);

// Somewhat time-consuming
double most_negative4 = pow(-DBL_MAX, 0xFFFF /* odd value */);

// My suggestion
double most_negative5 = (-DBL_MAX)*DBL_MAX;

原文由 chux - Reinstate Monica 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题