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