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

Проблема

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

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

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

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

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

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

Приведите вход, x, в double, а затем возвращает выход к типу данных с фиксированной точкой.

 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 функция, которая не поддерживает входы с фиксированной точкой.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте