是否有标准和/或可移植的方式来表示 C(++) 程序中的最小负值(例如使用负无穷大)?
float.h 中的 DBL_MIN 是最小的 正 数。
原文由 Will 发布,翻译遵循 CC BY-SA 4.0 许可协议
是否有标准和/或可移植的方式来表示 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 许可协议
3 回答1.3k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
4 回答840 阅读
1 回答915 阅读
1 回答949 阅读
1 回答715 阅读
1 回答816 阅读
-DBL_MAX
在 ANSI C 中,在 float.h 中定义。