dfa*_*dfa 120
-DBL_MAX 在ANSI C中,在float.h中定义.
for*_*ran 70
浮点数(IEEE 754)是对称的,因此如果您可以表示最大值(DBL_MAX或numeric_limits<double>::max()),则只需加一个减号.
然后是很酷的方式:
double f;
(*((long long*)&f))= ~(1LL<<52);
Run Code Online (Sandbox Code Playgroud)
rub*_*nvb 40
在C中,使用
#include <float.h>
const double lowest_double = -DBL_MAX;
Run Code Online (Sandbox Code Playgroud)
在C++ pre-11中,使用
#include <limits>
const double lowest_double = -std::numeric_limits<double>::max();
Run Code Online (Sandbox Code Playgroud)
在C++ 11及更高版本中,使用
#include <limits>
constexpr double lowest_double = std::numeric_limits<double>::lowest();
Run Code Online (Sandbox Code Playgroud)
And*_*are 32
试试这个:
-1 * numeric_limits<double>::max()
Run Code Online (Sandbox Code Playgroud)
参考: numeric_limits
此类专门用于每个基本类型,其成员返回或设置为不同的值,这些值定义类型在其编译的特定平台中具有的属性.
Chr*_*oph 20
您在寻找实际无穷大还是最小有限值?如果是前者,请使用
-numeric_limits<double>::infinity()
Run Code Online (Sandbox Code Playgroud)
这只适用于
numeric_limits<double>::has_infinity
Run Code Online (Sandbox Code Playgroud)
否则,你应该使用
numeric_limits<double>::lowest()
Run Code Online (Sandbox Code Playgroud)
这是在C++ 11中引入的.
如果lowest()没有,你可以回头
-numeric_limits<double>::max()
Run Code Online (Sandbox Code Playgroud)
这可能与lowest()原则上不同,但通常在实践中不同.
从C++ 11开始,您可以使用 numeric_limits<double>::lowest().根据标准,它会返回您正在寻找的内容:
有限值x使得在其中没有其他有限值y
y < x.
对于所有专业都有意义is_bounded != false.
有很多答案可供选择-std::numeric_limits<double>::max().
幸运的是,它们在大多数情况下都能很好地工作.浮点编码方案在尾数和指数中分解数字,并且它们中的大多数(例如,流行的IEEE-754)使用不属于尾数的不同符号位.这允许通过翻转符号来转换最小负数中的最大正数:
该标准不强加任何浮点标准.
我同意我的论点有点理论,但是假设某个偏心编译器制造商会使用革命性的编码方案,其中尾数编码为二进制补码的某些变体.二进制补码编码不对称.例如,对于带符号的8位字符,最大正数为127,但最小负数为-128.所以我们可以想象一些浮点编码显示类似的不对称行为.
我不知道任何类似的编码方案,但重点是标准不能保证符号翻转产生预期的结果.所以这个流行的答案(对不起家伙!)不能算是完全便携的标准解决方案!/*至少不是如果你没有断言那numeric_limits<double>::is_iec559是真的*/