У меня есть кое-что, чтобы спросить об экспоненте бита Значение 32, это считать от 0 до 31.
Однако они будут разделены на две части, положительные и отрицательные части, которых всего 32 (-16.....+15).
Мой вопрос, почему он отрицательный -16, можно ли поменять местами лайк (-15....+16),
А как узнать максимум минуса -16 и максимум плюса 15?
Некоторые возможности, такие как (-11.....+20) = 32 и так далее.
И фактический диапазон для binary16 ближе к диапазону, о котором вы спрашивали. Необработанные значения степени варьируются от 0 до 31, но после вычитания смещения 15 фактические значения степени варьируются от -15 до +16. Но это тоже не совсем правильно, потому что необработанные значения экспоненты 0 и 31 являются особыми. Когда необработанное значение показателя степени равно 0, это указывает на то, что мы имеем дело с субнормальными значениями, у которых показатель степени равен -14, а не -15. И когда необработанное значение экспоненты равно 31, это указывает на то, что мы имеем дело со специальными значениями Inf и Nan.
Показатели используют схему смещения для представления положительного и отрицательного; они не дополнение до двух.
@Steve KTT, привет, сэр, спасибо за ответ на вопрос, означает ли это, что -16.....+15 уже является форматом с плавающей запятой?
@SteveSummit Я думаю, что могу посчитать, почему начальная точка начинается с -16
@Steven KTT привет, сэр, извините, раньше я этого не понял, вот что я спрашиваю, почему это начинается с -16.... и заканчивается на +15, если считать по индексу -16, -15, ..... 0 ... 14 , 15. всего 32, но почему оно начинается с -16 and end with 15`
Не заводится при -16. Показатели для binary16 варьируются от -15 до +16 (хотя допустимый диапазон составляет от -14 до +15). Обозначение «-16 <---> +15» на рисунке просто неверно. (Откуда взялась эта цифра? Остальная информация в ней верна.)
@SteveSummit привет, сэр, извините, прежде чем я не прочитал ваш чат, спасибо, что сообщили мне
Если бы диапазоны действительно были такими, как вы их нашли, то это можно было бы оправдать следующим образом: значения мантиссы (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.
Это верно, если вы сбреете кодировку для денормальных чисел, бесконечности и NaN.
Я до сих пор не знаю, откуда у тебя 1*2^-16.
Я просто использовал в вопросе диапазон показателей, который напрямую взят из данных на цитируемом изображении. Но и там таблица совершенно не согласуется с приведенным под ней расчетом. 0..31 со смещением 15 дает -15..16, сбрасывание экстремумов для нуля и бесконечности дает -14..15, что дает больше больших чисел, чем очень маленьких. Я, вероятно, должен изменить ответ с этим.
@ Не согласен с тем, что это довольно произвольно, смещение таково, что 1/min_normal близко к max, а не бесконечно. а 1/max чуть меньше min_normal и не равно нулю.
Речь идет о кодировке binary16.
однако они будут разделены на две части, положительную и отрицательную, всего 32 (-16...+15)
Нет. 5 битов экспоненты не делятся на две части (-16...+15). Примечание «(-16…+15)» на картинке вводит в заблуждение.
Вместо этого подумайте о 5 битах экспоненты как о смещенном значении экспоненты [0...31], которое имеет разное значение в зависимости от значения.
1
, а экспонента является смещенной экспонентой — смещением экспоненты.exponent = biased_exponent - 15
0
, а показатель степени равен 1 — смещение показателя степени.exponent = 1 - 15
мой вопрос, почему минус -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, ответ разделил [0..31] на 3 поддиапазона: [1...30], [0...0] и [31...31]`. Каждый поддиапазон определяет интерпретацию 32 битов.
Значение смещения — которое, да, равно 15 для половинной точности или двоичного формата 16 — является одним из фундаментальных определяющих свойств типа с плавающей запятой, наряду с размерами и расположением полей знака, экспоненты и мантиссы. Итак, нет, вы не можете изменить его, потому что тем самым вы создадите новый, другой, несовместимый формат с плавающей запятой. (Но если вы хотите создать новый формат, то да, вы можете выбрать любые значения!)