1

在 64 位平台中,double 的范围如下:

-2.22507e-308 ~ +2.22507e-308
-1.79769e+308 ~ +1.79769e+308

我遵循IEEE754标准并尝试通过以下等式计算双精度范围,

x = (-1)^s * (1+fraction) * 2^(exponent-bias)

所以我尝试在64位平台上进行计算,但不确定以下是否正确?

由于偏差为 1024,因此可以通过以下方式计算 double 的最大值:

(1-2^-52) * 2^(2^11 - 1024) = 2.22507e-308

好像对...

但是当我以同样的方式计算 double 的最小值时

(1-2^-52) * 2^-(1024-1)) = 1.1125369292536007e-308, 
1024 -1 (minus 1 is for zero bit?))

结果不正确......所以我想知道手动计算双精度范围的正确方法是什么。

预先感谢。

4

1 回答 1

3

Max(替换任何合理的类型):

std::numeric_limits<double>::max()

Min(在 C++11 中称为“最低”,因为它有min其他含义,请参阅评论):

std::numeric_limits<double>::lowest()
于 2014-11-09T09:35:58.763 回答