Факторы ULP нативных операторов с плавающей точкой

Представление бесконечно вещественных чисел с конечным числом бит требует приближения. Это приближение может привести к ошибкам округления при расчетах с плавающей точкой. Чтобы измерить ошибки округления, стандарт с плавающей точкой использует относительную погрешность и ошибку ULP (Units in the Last Place). Чтобы узнать об относительной погрешности, см. «Относительная точность» и «Факторы ULP».

Если экспонентная область значений не ограничена выше, Модули в Last Place (ULP) числа с плавающей запятой x являются расстоянием между двумя близкими трансграничными числами с плавающей запятой a и b ближайшими к x. Стандарт IEEE-754 требует, чтобы результат элементарной арифметической операции, такой как сложение, умножение и деление, был правильно округлым. Правильно округленный результат означает, что округленный результат находится в пределах 0,5 ULP от точного результата.

Приверженность операторов с собственной плавающей точкой к IEEE-754 стандарту

Нативная технология с плавающей точкой в HDL- Coder™ соответствует стандарту IEEE арифметики с плавающей точкой. Основные арифметические операции, такие как сложение, вычитание, умножение, деление и взаимное, уполномочены IEEE иметь нулевую ошибку ULP. Когда вы выполняете эти операции в нативном режиме с плавающей точкой, числовые результаты, полученные из сгенерированного HDL-кода, совпадают с исходным Simulink® модель.

Некоторые расширенные математические операции, такие как экспоненциальные, логарифмические и тригонометрические операторы, имеют специфическое для машины поведение реализации, потому что эти операторы используют повторяющиеся реализации на основе рядов тейлоров и ремезов. Когда вы используете эти операторы в нативном режиме с плавающей точкой, могут быть относительно небольшие различия в числовых результатах между моделью Simulink и сгенерированным HDL-кодом.

Можно измерить различие в числовых результатах как относительная погрешность или ULP. Ненулевое ULP для этих операторов не означает несоответствия стандарту IEEE. ULP единицы эквивалентен относительной погрешности 10^-7. Можно игнорировать такие относительно небольшие ошибки, задавая пользовательское значение допуска для ULP при генерации HDL- испытательного стенда. Например, можно задать пользовательский допуск с плавающей точкой одного ULP, чтобы игнорировать ошибку при проверке сгенерированного кода. Для получения дополнительной информации см. раздел «Параметры допуска с плавающей точкой».

Значения ULP операторов с плавающей точкой

Таблица перечисляет ULP операторов с плавающей точкой, которые имеют ненулевое ULP. В сложение к этим операторам блок HDL Reciprocal имеет ULP из пяти.

Математические функции

Блоки SimulinkМодули измерения в ошибке последнего места (ULP)
exp1
журнал1
log101
10 ^ u1
голова1
hypot1

Тригонометрические функции

Блоки SimulinkМодули измерения в ошибке последнего места (ULP)
sin2
потому что2
tan3
asin2
acos2
atan2
atan25
sinh1
дубинка1
tanh1
asinh2
acosh2
atanh3
sincos2

Факторы

Для определенных входных значений с плавающей точкой некоторые блоки могут получить результаты симуляции, которые варьируются от MATLAB® результаты симуляции. Чтобы увидеть различие в результатах, прежде чем вы сгенерируете код, включите генерацию модели валидации. В диалоговом окне Параметры конфигурации на панели HDL Code Generation установите флажок Generate validation model.

  • Если вы выполняете расчеты, которые включают комплексные числа и исключение, такое как Inf или NaNРезультат HDL-симуляции с собственной плавающей точкой может потенциально отличаться от результата симуляции Simulink. Для примера, если вы умножаете комплексный вход с Inf, результат симуляции Simulink Infi тогда как результатом моделирования HDL является NaN+Infi.

  • Если вы вычисляете квадратный корень или логарифм отрицательного числа, результат симуляции с собственной плавающей точкой 0. Этот результат совпадает с результатом симуляции при проверке проекта с помощью испытательного стенда SystemVerilog DPI. В Simulink полученный результат NaN. Согласно IEEE-754 стандарту, если вычислить квадратный корень или логарифм отрицательного числа, то результатом будет само это число.

  • Если вход в Direct Lookup Table (n-D) имеет тип данных с плавающей точкой, но элементы таблицы используют меньший тип данных, сгенерированный HDL-код может быть потенциально неправильным. Для примера вход имеет значение single type и элементы используют uint8 тип. Чтобы получить точные результаты симуляции HDL, используйте совпадающий тип данных для входного сигнала и элементов интерполяционной таблицы.

  • Если вы используете блок Cosine с входами -7.729179E28 или 7.729179E28, сгенерированный HDL-код имеет ULP 4. Для всех других входов ULP равен 2.

  • Когда вы используете Math Function блок для вычисления mod(a,b) или rem(a,b), где a - дивиденды и b является делителем, результат симуляции в собственном режиме с плавающей точкой изменяется от результата симуляции MATLAB в этих случаях:

    • Если b is integer and ab>232, результат симуляции в собственном режиме с плавающей точкой равен нулю. Для такого значительного различия в величине между числами a и bэта реализация сохраняет область на целевом устройстве FPGA.

    • Если ab близок  к 223результат симуляции в собственном режиме с плавающей точкой может потенциально отличаться от результатов симуляции MATLAB.

См. также

Руководства по моделированию

Функции

Похожие примеры

Подробнее о