Имеет ли двойной диапазон больше, чем длинный? - программирование
Подтвердить что ты не робот

Имеет ли двойной диапазон больше, чем длинный?

В статье о MSDN указано, что тип данных double имеет диапазон "-1.79769313486232e308.. 1.79769313486232e308". В то время как тип данных long имеет только "-9,223,372,036,854,775,808.. 9,223,372,036,854,775,807". Как double может хранить гораздо больше данных, чем long, если они имеют размер 64 бит?

http://msdn.microsoft.com/en-us/library/cs7y5x0x (v = vs .90).aspx

4b9b3361

Ответ 1

Число возможных удвоений и количество возможных длин одинаковы, они просто распределены по-разному *.

Длины равномерно распределены, а поплавков - нет. Вы можете прочитать здесь здесь.

Id пишите больше, но по какой-то причине курсор прыгает по всему месту на моем телефоне.

Изменить: это может быть полезно: http://en.m.wikipedia.org/wiki/Double-precision_floating-point_format#section_1

Edit2: и это еще лучше: http://blogs.msdn.com/b/dwayneneed/archive/2010/05/07/fun-with-floating-point.aspx

* Согласно этой ссылке, было бы видно, что на самом деле есть больше длин, так как некоторые удваиваются, теряются из-за того, что представлены NaNs и другие специальные числа.

Ответ 2

long - это подписанное 64-битовое целочисленное значение, а double - это 64-битное значение с плавающей запятой. Взгляд на их типы FCL может иметь больше смысла. long отображается на System.Int64 и double на System.Double.

Ответ 3

Простой ответ заключается в том, что double может быть точным только до 15-16 цифр, в отличие от long, который (как целочисленный тип) имеет абсолютную точность в явном значении цифры, в этом случае 19 цифр. (Имейте в виду, что цифры и значения семантически отличаются.)

double: -/+ 0,000,000,000,000,01 до +/- 99,999,999,999,999.9 (с точностью 100% с потерей точности, начиная с 16-й цифры, как представлено в "-1.79769313486232e308.. 1.79769313486232e308".)

long: -9,223,372,036,854,775,808 до +9,223,372,036,854,775,807

ulong: от 0 до 18,446,744,073,709,551,615 (более чем длинный, но идентичный диапазон значений (поскольку он был сдвинут только для исключения отрицательных результатов).

В общем случае int-type действительные числа предпочтительнее значений с плавающей запятой , если вам явно не требуется десятичное представление (для любой цели).


Кроме того, вы можете знать, что подписанный предпочтительнее без знака, поскольку первый гораздо менее подвержен ошибкам (рассмотрим инструкцию uint i;, затем i - x; где x > i).