Почему double.MaxValue больше, чем long.MaxValue? - PullRequest
20 голосов
/ 14 апреля 2010

они оба содержат 8 байтов, но почему максимальное значение для double на намного больше, чем максимальное значение для long? доступно конечное число битов, так как вы могли бы достичь большего числа с помощью переменных с плавающей запятой?

Ответы [ 4 ]

19 голосов
/ 14 апреля 2010

Используется другое представление (с плавающей запятой) с использованием показателей степени и мантиссы

Подробнее см. IEEE754

8 голосов
/ 14 апреля 2010

У двойного есть то, что называется показателем степени, который в основном является просто коэффициентом масштабирования. Это позволяет значительно увеличить дальность действия удвоения, но за счет точности.

Long - это простое целое число без коэффициента масштабирования.

6 голосов
/ 14 апреля 2010

Поскольку представление с плавающей точкой имеет меньшую точность. В то время как тип long может представлять все целые числа в диапазоне от минимального до максимального, тип double может представлять только некоторые из них.

Поскольку они занимают одинаковое количество битов, количество чисел, которое каждый способен выразить, почти одинаково (на самом деле, double может представлять меньшее количество чисел). Просто темпы между этими числами разные.

6 голосов
/ 14 апреля 2010

Числа с плавающей запятой состоят из мантиссы и показателя степени, а значение числа с плавающей запятой равно:

Мантисса * 2 Показатель

Показатель степени в Double равен 11 битам, поэтому максимальное значение имеет величину 2 2 11 - 1 = 2 1024 , т.е. больше, чем величина 64-разрядного двойного знака со знаком, что составляет 2 63 -1.

...