Вычислить биты экспоненты

У меня есть кое-что, чтобы спросить об экспоненте бита Значение 32, это считать от 0 до 31.

Однако они будут разделены на две части, положительные и отрицательные части, которых всего 32 (-16.....+15).

Мой вопрос, почему он отрицательный -16, можно ли поменять местами лайк (-15....+16),

а как узнать максимум минуса -16 и максимум плюса 15?

Некоторые возможности, такие как
(-11.....+20) = 32 и так далее.

Значение смещения — которое, да, равно 15 для половинной точности или двоичного формата 16 — является одним из фундаментальных определяющих свойств типа с плавающей запятой, наряду с размерами и расположением полей знака, экспоненты и мантиссы. Итак, нет, вы не можете изменить его, потому что тем самым вы создадите новый, другой, несовместимый формат с плавающей запятой. (Но если вы хотите создать новый формат, то да, вы можете выбрать любые значения!)

Steve Summit 16.02.2023 13:21

И фактический диапазон для binary16 ближе к диапазону, о котором вы спрашивали. Необработанные значения степени варьируются от 0 до 31, но после вычитания смещения 15 фактические значения степени варьируются от -15 до +16. Но это тоже не совсем правильно, потому что необработанные значения экспоненты 0 и 31 являются особыми. Когда необработанное значение показателя степени равно 0, это указывает на то, что мы имеем дело с субнормальными значениями, у которых показатель степени равен -14, а не -15. И когда необработанное значение экспоненты равно 31, это указывает на то, что мы имеем дело со специальными значениями Inf и Nan.

Steve Summit 16.02.2023 13:31

@Steve KTT, привет, сэр, спасибо за ответ на вопрос, означает ли это, что -16.....+15 уже является форматом с плавающей запятой?

Kangkue 16.02.2023 13:58

@SteveSummit Я думаю, что могу посчитать, почему начальная точка начинается с -16

Kangkue 16.02.2023 13:59

@Steven KTT привет, сэр, извините, раньше я этого не понял, вот что я спрашиваю, почему это начинается с -16.... и заканчивается на +15, если считать по индексу -16, -15, ..... 0 ... 14 , 15. всего 32, но почему оно начинается с -16 and end with 15`

Kangkue 16.02.2023 14:24

Не заводится при -16. Показатели для binary16 варьируются от -15 до +16 (хотя допустимый диапазон составляет от -14 до +15). Обозначение «-16 <---> +15» на рисунке просто неверно. (Откуда взялась эта цифра? Остальная информация в ней верна.)

Steve Summit 16.02.2023 16:05

@SteveSummit привет, сэр, извините, прежде чем я не прочитал ваш чат, спасибо, что сообщили мне

Kangkue 17.02.2023 00:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
8
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если бы диапазоны действительно были такими, как вы их нашли, то это можно было бы оправдать следующим образом: значения мантиссы (1.m)_2, где m — битовая строка сохраненной части мантиссы, принимает значения от 1 до 2. Таким образом, диапазон закодированных чисел — от 1*2^-16=2^-16 незадолго до 2*2^15=2^16, что довольно симметрично в показателях.

Однако смещение 15 сдвигает «сырой» диапазон 0..31 на -15..16, простое вычитание, суперсекретный декодер не требуется. Нулевое число представлено всеми нулевыми битами, включая биты экспоненты (также у субнормальных чисел все биты экспоненты равны нулю). С другой стороны, все биты экспоненты один берутся для кодирования бесконечности и результатов «фубар» (NaN).

Таким образом, диапазон показателей, доступный для кодирования обычных чисел, равен -14..15.

По приведенной выше логике это дает «в 4 раза больше больших чисел, чем маленьких». С другой стороны, с субнормальами это в какой-то степени уравновешено (если кто-то заботится о таком балансе, это все довольно произвольно).

Это не совсем так. «Настоящие» значения степени для половинной точности варьируются от -14 до +15. А затем субнормальы позволяют снизиться до 0.

Steve Summit 16.02.2023 14:02

Это верно, если вы сбреете кодировку для денормальных чисел, бесконечности и NaN.

Lutz Lehmann 16.02.2023 14:05

Я до сих пор не знаю, откуда у тебя 1*2^-16.

Steve Summit 16.02.2023 14:11

Я просто использовал в вопросе диапазон показателей, который напрямую взят из данных на цитируемом изображении. Но и там таблица совершенно не согласуется с приведенным под ней расчетом. 0..31 со смещением 15 дает -15..16, сбрасывание экстремумов для нуля и бесконечности дает -14..15, что дает больше больших чисел, чем очень маленьких. Я, вероятно, должен изменить ответ с этим.

Lutz Lehmann 16.02.2023 15:40

@ Не согласен с тем, что это довольно произвольно, смещение таково, что 1/min_normal близко к max, а не бесконечно. а 1/max чуть меньше min_normal и не равно нулю.

chux - Reinstate Monica 16.02.2023 22:57
Ответ принят как подходящий

Речь идет о кодировке binary16.

однако они будут разделены на две части, положительную и отрицательную, всего 32 (-16...+15)

Нет. 5 битов экспоненты не делятся на две части (-16...+15). Примечание «(-16…+15)» на картинке вводит в заблуждение.

Вместо этого подумайте о 5 битах экспоненты как о смещенном значении экспоненты [0...31], которое имеет разное значение в зависимости от значения.

  1. [1...30] (нормали): подразумеваемый значащий бит равен 1, а экспонента является смещенной экспонентой — смещением экспоненты.
exponent = biased_exponent - 15
  1. [0...0] (субнормаль): подразумеваемый значащий бит равен 0, а показатель степени равен 1 — смещение показателя степени.
exponent = 1 - 15 
  1. [31...31]: Спец. Значение равно бесконечности или не является числом.

мой вопрос, почему минус -16, можно поменять местами как (-15....+16),

Это не -16. Считать это "-15....+16" правильнее, если не считать крайних случаев.


как я могу узнать максимальное отрицательное -16 и максимальное положительное 15

Самый отрицательный двоичный показатель равен -14, а максимальный положительный равен 15.


Максимальный binary16 равен

1,1111 1111 1112 * 230 - 15 или 65504,0

Минимальный нормальный двоичный файл16 равен

1.0000 0000 0002 * 2-14 или ≈ 6,10 × 10−5.

Минимальный ненулевой двоичный код16 равен

0,0000 0000 0012 * 2-14 или ≈ 5,96 × 10−8.

привет, сэр, спасибо за ответ на мой вопрос, у меня есть кое-что спросить, раньше это было 2⁵ = 32, и необработанное значение было (0..31), почему это стало (1..30)

Kangkue 17.02.2023 02:24

Kangkue, ответ разделил [0..31] на 3 поддиапазона: [1...30], [0...0] и [31...31]`. Каждый поддиапазон определяет интерпретацию 32 битов.

chux - Reinstate Monica 17.02.2023 02:43

Другие вопросы по теме