спасение утопающих
Jun. 25th, 2011 11:07 amПодробный список известных вариантов хранения с плавающей точкой на всех известных архитектурах - просто доставляет разнообразием и хитрыми решениями.
Несмотря на это, всё равно придётся делать своё - потому что должно тривиально читаться в hex-дампе.
(И вообще автор жжот нипадецки - но оценить его могут только те, кто работал с битово-ассемблерными потрохами минимум двух заметно разных рахитектур...)
Несмотря на это, всё равно придётся делать своё - потому что должно тривиально читаться в hex-дампе.
(И вообще автор жжот нипадецки - но оценить его могут только те, кто работал с битово-ассемблерными потрохами минимум двух заметно разных рахитектур...)
no subject
Date: 2011-06-25 07:21 pm (UTC)На самом деле, основание 16 даёт больший range, но зато уменьшает precision с номинальных 23 бит до, в худшем случае, 19 бит. То есть, точность будет плавать где-то в районе 0.0002% (ошибка 0.0000019)
Не то чтобы это совсем плохо, но в float32:
1) знак виден сразу, ибо один бит на это выделен отдельно, а не сделана замесь в 2-complement.
2) отрицательные и положительные числа имеют одинаковый диапазон
3) отрицательные числа не сложнее воспринимать, чем положительные
5) мантисса имеет диапазон 2^-127..2^127, что исключительно прилично (подходит для всех измерений, кроме астрономических), а у тебя 16^-127..16^128, что непонятно зачем нужно. Для примера, 16^128 это "13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096", что совершенно дико и никогда не понадобиться вообще никому в мире в ближайший гугол лет. Лучше бы ты бит знака сделал в нулевом байте, чуть прижав диапазон экспоненты.
С другой стороны, бит знака + мантисса занимают девять бит, то есть, заезжают на первый байт. Но можно было бы их развернуть местами, тогда последний бит мантиссы был бы знаком, и всё.
Короче, можно лучше, и float32 — это почти идеальная вещь, только знак и экспоненту местами поменять: 8:1:23. Ну или в твоём формате, раз ты не гнушаешься прыжками точности мантиссы при переходе между разными значениями экспоненты, можно поприжать размер экспоненты и вынести знак и флаги в отдельные пару (четвёрку?) бит: 1:3:4:24 (знак-флаги-экспонента для b=16, мантисса).
no subject
Date: 2011-06-25 07:27 pm (UTC)В моём случае таки проще читать. Можешь считать местной спецификой;)
Про основание порядка - ok, согласен, сделаем двоичным.
float32 (точнее, binary32 имени IEEE754) мне не нравится именно принудительной нормализацией к верхним значениям.
no subject
Date: 2011-06-25 07:51 pm (UTC)Кстати, нормализация — это процесс, никто же не заставляет его делать тебе. Просто формат у него можно взять и всё.
Зато можно будет прямо во float кастить и получать вменяемые результаты.
no subject
Date: 2011-06-25 08:00 pm (UTC)Заставляет, если как в IEEE754 при biased_exponent != 0 старший бит мантиссы всегда 1 и скрыт.
no subject
Date: 2011-06-25 08:12 pm (UTC)