2014-02-19 2 views
2

Все, что я нашел после поиска, это то, как их использовать. Мне очень любопытно, почему. Каковы преимущества использования значения с плавающей запятой в шестнадцатеричном формате?Цель шестнадцатеричного значения с плавающей запятой?

Редактирование разъяснений:

Я учусь, чтобы получить сертификат инженера Zend PHP. В одном из практических тестов он размещает кусок кода с несколькими установленными переменными, выполняет некоторую базовую математику, затем спрашивает, что такое выход. Одна из переменных - «0xFF». Который, как я понимаю, представляет 255.0 как значение с плавающей запятой.

Итак, мой вопрос, когда это

0xfed01 

лучшего использования, чем это

1043713 
+0

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

+1

Когда вы говорите, что '0xFF' представляет' 255.0', вероятно, есть преобразование: это целое число 0xFF, преобразованное в float. '0xFF' не является представлением 255.0 для любого общего формата. C99 имеет шестнадцатиричное понятное для человека соглашение о печати и анализе чисел с плавающей запятой, но оно должно выглядеть как «0xFF.0p0», чтобы быть в этом формате (и этот формат, насколько мне известно, до сих пор только делался к Java).Короче говоря, вы уверены, что 0xFF на самом деле не является целым числом (позже преобразованным в float) и что ваш вопрос не «Цель шестнадцатеричного целочисленного значения?»? –

+1

@PascalCuoq: (... только сделал свой путь к Java). И Питон тоже! Не как литералы, но у Python есть методы 'float.hex' и' float.fromhex', так что, например, '2.3.hex()' дает '0x1.2666666666666p + 1''. –

ответ

8

C имеет шестнадцатеричное Константы с плавающей точкой, с формой, начиная с «0x», то шестнадцатеричное цифры, необязательно включающие точку радиуса, затем «р», а затем подписанный показатель в десятичной форме, который является степенью двух. Например, 0x1.fp-2 является (1 + 15/16) • 2 -2 = .484375.

Шестнадцатеричные константы с плавающей запятой облегчают компилятору воспроизведение точного значения.

С десятичными константами существует некоторая трудность преобразования десятичного числа в двоичную с плавающей запятой. Это связано с тем, что некоторые значения могут быть очень близки к точке, где значение округляется вверх или вниз, в зависимости от конечных цифр. И для этого может быть сложно сделать арифметику, потому что числовая арифметика подвержена ошибкам округления. Попытка избежать ошибок округления при вычислении точных значений с цифрами, превышающими те, которые обычно представлены в формате с плавающей запятой, требует тщательной разработки.

Эта проблема решена (Correctly Rounded Binary-Decimal and Decimal-Binary Conversions by David M. Gay, 1990). Однако некоторые компиляторы не реализовали его должным образом. Программистам проще писать код для преобразования шестнадцатеричной плавающей запятой, потому что он отлично подходит для двоичного формата: вы можете легко определить, находится ли число выше или ниже точки округления, изучая несколько отдельных цифр; нет необходимости в задействованной арифметике, которая связывает ошибки округления.

Как правило, инженер-программист, который заботится о точности с плавающей точкой, будет готовить шестнадцатеричные константы с плавающей запятой для использования в программе, генерируя их специальным программным обеспечением (например, Maple или Mathematica или их собственным специальным программным обеспечением для конкретных задач или комбинация).

Также можно создать константу с плавающей запятой, указав ее внутреннее представление, например, создав объединение целого без знака и объект с плавающей запятой и инициализируя объединение шестнадцатеричным значением для целого числа. Для этого требуется знание формата кодирования значения с плавающей запятой. Это редко нужно делать. Обычно это полезно только для специальных целей, таких как подготовка NaNs с полезными нагрузками и работа в программном обеспечении, которое выполняет специализированные операции с плавающей запятой.

+0

Большое спасибо, поэтому для точного сравнения с плавающей запятой. – Brian

Смежные вопросы