计算“双倍范围”的正确方法是什么?

时间:2014-11-09 09:32:39

标签: double double-precision ieee

在64位平台中,双倍范围如下:

-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?))

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

提前感谢。

1 个答案:

答案 0 :(得分:3)

Max(替换任何明智的类型):

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

Min(在C ++ 11中称为&#34;最低&#34;因为min意味着其他内容,请参阅评论):

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