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