exponenta event banner

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

Проблема

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

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

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

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

Следующий код возвращает ошибку, так как 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 с фиксированной точкой с помощью таблицы подстановки.

  • Аппроксимация многочлена (Polynomial Approximation) - можно аппроксимировать результаты функции, которая не поддерживается для фиксированной точки, аппроксимацией многочлена. Пример см. в разделе Расчет арктангенса с фиксированной точкой.

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

Связанные темы