Некоторые функции не поддерживаются для преобразования с фиксированной точкой и могут привести к ошибкам во время преобразования.
Когда вы сталкиваетесь с функцией, которая не поддерживается для преобразования, можно временно оставить эту часть алгоритма в плавающей точке.
Следующий код возвращает ошибку из-за log
функция не поддерживается для входов с фиксированной точкой.
x = fi(rand(3),1,16,15); y = log(x)
Приведите вход, x
, в double, а затем возвращает выход к типу данных с фиксированной точкой.
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
функция, которая не поддерживает входы с фиксированной точкой.