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

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

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

Моя интуиция говорит да, с тех пор дважды имеет больше дробных битов и больше битов экспоненты, но могли бы быть некоторые глупые глюки, которые я пропускаю.

14
задан Ciro Santilli 新疆改造中心法轮功六四事件 2 June 2015 в 15:30
поделиться

6 ответов

Да.

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

Не вдаваясь в подробности ...

Возьмем число 152853.5047 (период обращения спутника Юпитера Ио в секундах)

В научных обозначениях это число 0,1528535047 × 10 ^ 6

Поскольку компьютеры понимают только 1 и 0, есть способ определить .

Мантисса (1528535047) и показатель степени (6) хранятся в 32-битном формате ... если я правильно помню, для мантиссы используются только 24-битные значения, поэтому с плавающей запятой обычно важнее точность, чем размер. Чем больше число, тем менее точным оно может быть.

1528535047 = 1011011000110111001100000000111 , поэтому вы можете сохранить только первые 24 бита ... последние три единицы отсекаются.

Поскольку целые числа 32-битные, вы правы, числа с плавающей запятой не могут точно содержать их. менее значащие цифры обрезаются с конца.

Любое целое число с абсолютным значением меньше 2 ^ 24 (24 бита) может быть сохранено без потери точности. (16,777,216)

Вот как биты хранятся в числе с плавающей запятой:

Схема хранения с плавающей запятой http://phimuemue.wordpress.com/files/2009/06/576px-ieee-754-single -svg1.png

source Один бит для знака, 8 бит для экспоненты и 23 бита для мантиссы. Поэтому, чтобы ответить на ваш вопрос, поскольку для мантиссы зарезервировано только 23 бита, 32-битное целое число не может быть показано с точностью.Он быстро начнет отсекать числа (справа), поскольку для отображения требуется больше цифр.

Для числа типа double вы просто увеличиваете количество битов, которое оно может хранить ... на самом деле это называется двойной точностью , поэтому любое число, которое может быть показано как число с плавающей запятой, может быть показаны как двойные. Дополнительные 0 просто добавляются к мантиссе.

По этой причине, поскольку double занимает 64 бита, большинство людей будет использовать double при преобразовании из 32-битного int в double. Для преобразования 16-битного шорт подойдет float.

22
ответ дан 1 December 2019 в 07:05
поделиться

На практике да. Однако сомневаюсь, что этого требует стандарт. Если платформа с 64-битным int s (AFAIK на текущих 64-битных платформах int на самом деле 32-битная, но long - 64) появляется, и он имеет double , который также является 64-битным, тогда некоторые значения int не будут представлены как значения double .

0
ответ дан 1 December 2019 в 07:05
поделиться

6.2.5 / 10 в n1256:

Существует три реальных типа с плавающей запятой, обозначенные как float, double и long { {1}} двойной. Набор значений типа float является подмножеством набора значений типа double ; набор значений типа double является подмножеством набора значений типа long .

(выделено мной).

Независимо от того, использует ли реализация IEEE754 или нет, стандарт C99 гарантирует то, что вы хотите.

9
ответ дан 1 December 2019 в 07:05
поделиться

Любое float число может быть представлено как double. Я не уверен насчет NaNs. (Я уверен, что вы можете представить float NaN как double, добавив дополнительные нули к значащему числу, но я не уверен, что программное или аппаратное обеспечение, реагирующее на NaN, будет реагировать на такой NaN точно так же)

.
1
ответ дан 1 December 2019 в 07:05
поделиться

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

Вот почему:

Оба числа представлены как знак, показатель степени и мантисса. Разница между float и double в том, что здесь больше места для экспоненты и мантиссы.

Для экспоненты более широкий диапазон не проблема. Вы можете представить все байтовые значения с помощью int, то же самое верно и для экспоненты. Мантисса немного отличается, но если вы заполните дополнительные биты двойной мантиссы нулями, вы получите точно то же значение, что и число с плавающей точкой.

Это может быть проще понять в десятичной системе счисления. Допустим, у вас есть десятичное число, например:

1.99234

Это число имеет 5 десятичных знаков после запятой.Что бы вы сделали, если бы вам пришлось расширить это число до 10 десятичных знаков? Легко: добавить нули:

1.9923400000

Это точно такое же число, только представленное с большей точностью в мантиссе.

7
ответ дан 1 December 2019 в 07:05
поделиться
0
ответ дан 1 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: