2014-11-09 4 views
0

В 64 битой платформе, диапазон двойной является следующим:Каков правильный способ рассчитать «диапазон двойников»?

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

и я последовал стандартный IEEE754 и попытался рассчитать диапазон двойного путем следующего уравнения,

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

Так что я пытался рассчитать 64-битная платформа, но я не уверен, правильно ли это?

Поскольку смещение 1024, максимальное значение двойного может быть вычислен следующим образом:

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

Это кажется правильным ...

, но когда я вычислить мин значение двойного те же путь

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

результат не верный ... так что я задаюсь вопросом, что является правильным способом для вычисления диапазона двойников вручную.

Благодарим заранее.

+0

К сожалению, у меня есть изменил тег ... – RyanLiu

+0

Вы пытаетесь рассчитать самое низкое положительное нормальное число или самый низкий положительный субнормальный? –

+0

@PatriciaShanahan да .. но я нашел ответ от wiki ... (http://en.wikipedia.org/wiki/Double-precision_floating-point_format) – RyanLiu

ответ

3

Max (заменить любой разумный тип):

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

Min (называемый "низкий" в C++ 11, потому что min имел в виду что-то другое, увидеть комментарии):

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

Я не думаю, что это то, что было после OP, но «как вы на самом деле собираетесь вычислять это значение. –

+0

Извините, возможно, вы неправильно поняли мой вопрос, мой вопрос заключается в том, как вычислить его вручную, а не использовать код для показа максимальное и минимальное значение ... – RyanLiu

+1

@ RyanLiu: если вы не хотите кода на C++, вы не должны отмечать свой вопрос C++. –