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