Ошибка твердости: Функция не поддерживается для Преобразования Фиксированной точки

Проблема

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

Возможные решения

Изолируйте неподдерживаемые функции

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

Следующий код возвращает ошибку потому что log функция не поддерживается для входных параметров фиксированной точки.

x = fi(rand(3),1,16,15);
y = log(x)

Бросьте вход, x, к двойному, и затем бросок выход назад к типу данных с фиксированной точкой.

 y = fi(log(double(x)),1,16)
y = 

   -0.2050   -0.0906   -1.2783
   -0.0990   -0.4583   -0.6035
   -2.0637   -2.3275   -0.0435

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13

Этот кастинг позволяет вам продолжать свое преобразование, пока вы не можете найти замену.

Создайте заменяющую функцию

Можно заменить неподдерживаемую функцию на альтернативу, которая поддерживается для преобразования фиксированной точки.

  • Приближение Интерполяционной таблицы — можно заменить много функций, которые не поддерживаются для преобразования фиксированной точки с интерполяционной таблицей. Для примера смотрите Фиксированную точку Реализации Log2 Используя Интерполяционную таблицу.

  • Полиномиальное приближение — можно аппроксимировать результаты функции, которая не поддерживается для фиксированной точки с полиномиальным приближением. Для примера смотрите, Вычисляют Арктангенс Фиксированной точки.

  • Созданная пользователями Функция — можно записать собственную функцию, которая поддерживает входные параметры фиксированной точки. Например, использование mod функция, которая действительно поддерживает входные параметры фиксированной точки, можно записать собственную версию rem функция, которая не поддерживает входные параметры фиксированной точки.

Похожие темы