Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
в английском варианте лучше расписано Half precision floating-point format
там сам алгоритм тоже приведен. если не разберешься, то через пару часиков накатаю, как со всеми делами разберусь.
если вкратце, то надо перевести hex в bin. потом парсить его биты. там каждая группа битов за что-то отвечает. я такое уже делал правда для single и double
я чесгря так и не понял, что надо. само кодирование, или только максимум и минимум? если кодирование, то код ниже, но говорю сразу. проверял на питоне, и потом по памяти переводил на AutoIt. могут быть ошибки. Самого AutoIt под рукой нет, проверить возможности тоже нет. Для надежности привожу код и на питоне, он рабочий.
Код:
Func _HexToBin($sHex)
$sBin = ''
$aHex = StringSplit($sHex, '', 2)
For $xDig in $aHex
$sBin &= _DigToBin($xDig)
Next
Return $sBin
EndFunc
Func _DigToBin($xDig)
Switch $xDig
Case '0'
Return '0000'
Case '1'
Return '0001'
Case '2'
Return '0010'
Case '3'
Return '0011'
Case '4'
Return '0100'
Case '5'
Return '0101'
Case '6'
Return '0110'
Case '7'
Return '0111'
Case '8'
Return '1000'
Case '9'
Return '1001'
Case 'A'
Return '1010'
Case 'B'
Return '1011'
Case 'C'
Return '1100'
Case 'D'
Return '1101'
Case 'E'
Return '1110'
Case 'F'
Return '1111'
EndSwitch
EndFunc
Func _BinToInt($sBin)
$sInt = 0
$iLen = StringLen($sBin)
$aBin = StringSplit($sBin, '', 2)
For $i = 0 to $iLen - 1
$iDig = Number($aBin[$i])
$sInt += $iDig*2^($iLen - $i - 1)
Next
Return $sInt
EndFunc
Func _BinToNum($sBin)
$iLen = StringLen($sBin)
$aBin = StringSplit($sBin, '', 2)
$iSgn = Number($aBin[0])
$sExp = ''
For $i = 1 to 5
$sExp &= $aBin[$i]
Next
$iExp = _BinToInt($sExp)
$sRes = ''
For $i = 6 to $iLen
$sRes &= $aBin[$i]
Next
$iRes = _BinToInt($sRes)
$iNum = (-1)^$iSgn*2^($iExp - 15)*(1 + $iRes)
Return $iNum
EndFunc
Func _HexToNum($sHex)
$sBin = _HexToBin($sHex)
$iNum = _BinToNum($sBin)
EndFunc
$sHex1 = '7BFF' ; max number in half-precise format
$sHex2 = '0400' ; min number in hals-precise format
MsgBox(0, '', '0x7BBFF is ' & _HexToNum($sHex1) & @CRLF & '0x0400 is ' & _HexToNum($sHex2))
где BN - бит.
B1 - бит знака: если 1 - то "-", если 0 то "+"
B2 - B6 - биты для вычисления экспоненты
B7 - B16 - биты для дробной части мантиссы, т.к ее целая часть почти всегда 1, 0 только если экспонента 0. (кстати код выше этого не учитывает. доработай сам для этих двух исключительных чисел. все есть на вики)
и того, если проводить анализ, то максимально число получается если экспонента и мантисса максимальна, и минимальна если наоборот. без учета вышеупомянутых двух исключительных чисел, легко найти что