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