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