Нативная технология с плавающей точкой может сгенерировать HDL-код из вашего проекта с плавающей точкой. Проекты с плавающей точкой имеют лучшую точность, более высокую динамическую область значений и более короткий цикл разработки, чем проекты с фиксированной точкой. Если ваш проект имеет сложные математические и тригонометрические операции, используйте собственную технологию с плавающей точкой.
HDL Coder™ генерирует код, который соответствует IEEE-754 стандарту арифметики с плавающей точкой. Собственные поддержки HDL-кодера с плавающей точкой:
Скругление до ближайшего режима округления
Денормальные числа
Исключения, такие как NaN (не число), Inf и нуль
Индивидуальная настройка ULP (модулей измерения на последнем месте) и относительная точность
HDL Coder использует режим округления до ближайшего четного округления. Этот режим разрешает все связи путем округления до ближайшей четной цифры.
Этот метод округления требует по меньшей мере трёх конечных бит после 23 бит мантиссы. MSB называется бит Guard, средний бит - бит Round, а LSB - бит Sticky. Таблица показывает округление, которое HDL Coder выполняет на основе различных значений трёх конечных бит. x
обозначает значение, которое не имеет значения, и может принимать значение 0 или 1.
Округление бит | Округление действия |
---|---|
0xx | Никаких действий не выполнено. |
100 | Галстук. Если бит mantissa, который предшествует биту Guard, равен 1, то в противном случае действие не выполняется. |
101 | Округлить. |
11x | Округлить. |
Денормальные числа являются числами, которые имеют поле экспоненты, равное нулю и ненулевое поле мантиссы. Начальный бит мантиссы равен нулю.
Денормальные числа имеют величины меньше, чем наименьшее число с плавающей запятой, которое может быть представлено без ведущих нулей в мантиссе. Наличие денормальных чисел указывает на потерю значащих цифр, которые могут накопиться в течение последующих операций и в конечном счете привести к неожиданным значениям.
Логика обработки денормальных чисел включает подсчет количества начальных нулей и выполнение операции сдвига влево, чтобы получить нормированное представление. Сложение этой логики увеличивает размер области на целевом устройстве и может повлиять на время вашего проекта.
При использовании собственной поддержки с плавающей точкой можно указать, хотите ли вы, чтобы HDL Coder обрабатывал денормальные числа в вашем проекте. По умолчанию генератор кода не проверяет на денормальные числа, что сохраняет область на целевой платформе.
Если вы выполняете такие операции, как деление на нуль или вычисляете логарифм отрицательного числа, HDL Coder обнаруживает и сообщает об исключениях. Таблица суммирует отображение из кодирования числа с плавающей запятой в значение числа для различных видов исключений. x
обозначает значение, которое не имеет значения, и может принимать значение 0 или 1.
Знак | Экспонента | Significand | Значение | Описание |
---|---|---|---|---|
x | 0xFF | 0x00000000 |
| Бесконечность |
x | 0xFF | Ненулевое значение | значение = NaN | Не число |
x | 0x00 | 0x00000000 | значение = 0 | Нуль |
x | 0x00 | Ненулевое значение |
| Denormal |
x | 0x00 < E < 0xFF | x |
| Нормальный |
Представление бесконечно вещественных чисел с конечным числом бит требует приближения. Это приближение может привести к ошибкам округления при расчетах с плавающей точкой. Чтобы измерить ошибки округления, стандарт с плавающей точкой использует относительную погрешность и ошибку ULP (Units in the Last Place).
Если экспонентная область значений не ограничена выше, Модули в Last Place (ULP) числа с плавающей запятой x являются расстоянием между двумя близкими трансграничными числами с плавающей запятой a и b ближайшими к x. Стандарт IEEE-754 требует, чтобы результат элементарной арифметической операции, такой как сложение, умножение и деление, был правильно округлым. Правильно округленный результат означает, что округленный результат находится в пределах 0,5 ULP от точного результата.
ULP одного означает добавление 1
десятичное значение числа. Таблица показывает приближение pi к девяти десятичным цифрам и то, как ULP одного изменяет приблизительное значение.
Число с плавающей запятой | Значение в десятичном числе | IEEE-754 представление для одиночных типов | ULP |
---|---|---|---|
3.141592741 | 1078530011 | 0|10000000|10010010000111111011011 | 0 |
3.141592979 | 1078530012 | 0|10000000|10010010000111111011100 | 1 |
Зазор между двумя последовательно представимыми числами с плавающей запятой изменяется в соответствии с величиной.
Число с плавающей запятой | Значение в десятичном числе | IEEE-754 представление для одиночных типов | ULP |
---|---|---|---|
1234567 | 1234613304 | 0|10010011|00101101011010000111000 | 0 |
1234567.125 | 1234613305 | 0|10010011|00101101011010000111001 | 1 |
Относительная погрешность измеряет различие между числом с плавающей запятой и приближением вещественного числа. Относительная погрешность возвращает расстояние от 1,0 до следующего большего числа. Эта таблица показывает, как вещественное значение числа изменяется с относительной точностью.
Число с плавающей запятой | Значение в десятичном числе | IEEE-754 представление для одиночных типов | ULP | Относительная погрешность |
---|---|---|---|---|
8388608 | 1258291200 | 0|10010110|00000000000000000000000 | 0 | 1 |
8388607 | 1258291198 | 0|10010101|11111111111111111111110 | 1 | 2.3841858e-07 |
1 | 1065353216 | 0|01111111|00000000000000000000000 | 0 | 1.1920929e-07 |
2 | 1073741824 | 0|10000000|00000000000000000000000 | 1 | 2.3841858e-07 |
Величина относительной погрешности зависит от реального значения числа с плавающей запятой.
В MATLAB®, eps
функция измеряет относительную точность числа с плавающей запятой. Для получения дополнительной информации см. eps
.