Отношения между 128, 64 и 32-битными числами с плавающей точкой IEEE-754 - PullRequest
0 голосов
/ 30 мая 2018

Я хочу познакомиться и освоиться с числами с плавающей точкой.Я делаю проект, который, надеюсь, поможет мне достичь этого, создавая динамически распределенные числа произвольного размера с плавающей запятой в C ++.Я просмотрел спецификации IEEE-754 для стандартных определений с плавающей запятой, но не смог найти общую корреляцию между ними (я использовал ссылки из Википедии на 32 , 64 и 128 бит чисел с плавающей запятой).Итак, мой вопрос: Существует ли общий шаблон между числами с плавающей запятой, который может быть применен к любому числу с плавающей запятой произвольного размера?

Если нет, с точки зрения программирования, было бы прощеопределить мое собственное представление с плавающей точкой, которое имеет шаблон?

РЕДАКТИРОВАТЬ: Под шаблоном я подразумеваю биты в мантиссе и показателе степени.

Ответы [ 3 ]

0 голосов
/ 30 мая 2018

2008 версия IEEE754 определяет, что форматы обмена, длина которых превышает 128 бит, должны следовать общему подходу.

Для двоичных форматов полная ширина k должна быть кратна 32 битам, а число битов поля экспоненты должно бытьбыть round(4 * log2 (k)) – 13.Можно убедиться, что эта формула также дает правильные значения для 64- и 128-битных форматов, но не для 16- или 32-битных (их показатели шире).

Для десятичных форматов полная ширина k должно быть кратным 32 битам, а число битов поля комбинации должно быть k / 16 + 9.Это также дает фактические числа для 32-, 64- и 128-битных форматов.

Все остальные свойства форматов и операций с ними должны оставаться неизменными, включая значимость и интерпретацию, смещение и интерпретацию экспоненты, округление цели искоро.Если вы

не смогли найти общую корреляцию между ними

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

С другой стороны, вы не ограничены этими стандартамиограничения.Более того, поскольку IEEE в основном предназначен для проектирования аппаратного обеспечения, а стандарт IEEE754 разработан для простоты аппаратной реализации, вам не нужно соблюдать его ограничения и вы можете использовать любую программную реализацию (например, GMP или MPFR).Преимущество реализации программного обеспечения заключается в отсутствии времени на распаковку чисел для расчетов и их упаковку.

0 голосов
/ 31 мая 2018

IEEE-754 двоичные типы определяют ширину экспоненты в битах, как показано ниже.

FP bit size  Expo bit size
16           5
32           8
64           11
128          15
256          19

В остальной части типа используется 1 знаковый бит и символ.

Per этот хороший ответ @ Netch , ширина показателя в битах равна round(4 * log2 (k)) – 13 для кратныхот 32 и выше.

эмпирический ответ на "Существует ли общий шаблон между числами с плавающей запятой, который может быть применен к любому числу с плавающей запятой произвольного размера?"Можно использовать приведенное ниже, чтобы сохранить корреляцию с существующим стандартом IEEE-754 и распространиться на другие размеры битов fp_size >= 8 (или >= 6, если вы хотите выдвинуть его).

int expo_width(int fp_size) {
  return lrint(fp_size >= 32 ? 4*log2(fp_size)-13, 3*log2(fp_size)-7);
}
0 голосов
/ 30 мая 2018

Не существует обязательного математического правила для числа бит в значимом и 1 или показателе степени.IEEE 754-2008 показывает формулу, которая описывает перечисленные форматы обмена для определенных размеров, но это в ненормативном примечании:

  • Для ширины хранилища k битов,число битов в значении (математическое значение с начальным битом, а не поле, которое в основном кодирует его без начального бита), p , равно k -round (4 ×log2 ( k )) + 13.
  • Количество битов в поле экспоненты, w , равно k - p.

Формула не выполняется для 16 или 32 бит;говорят, что он сохраняется только для 64 битов и ширины, кратных 32, больше или равных 128 (то есть не ширины 32 или 96).Я полагаю, что вы можете рассмотреть это предложение для больших размеров, но оно не является обязательным.

Насколько мне известно, параметры, указанные в таблице 3.5 пункта 3.6 IEEE 754-2008, возникают из-за поразительных балансов и историческихиспользование.Вы можете определить форматы с другими параметрами, как описано в пункте 3.7.3.7 дает некоторые рекомендации для определения расширенной точности с использованием параметров точности (цифры в значении) и максимального показателя степени или только точности.Или вы можете игнорировать IEEE 754 и определять свои собственные форматы.Стандарты не являются обязательными, и ваш дизайн должен зависеть от целей.

Примечание

1 «Значение» - предпочтительный термин длядробная часть числа с плавающей точкой.«Мантисса» - это термин для дробной части логарифма.Значения линейные (если число увеличивается в 1,2 раза, значение увеличивается в 1,2 раза, если не превышен порог экспоненты), мантиссы логарифмические.

...