С наклонным масштабированием смещения необходимо задать наклон и смещение номера. Реальное значение наклонного смещения масштабировалось, номер может быть представлен:
Запустите с конечных точек, которые вы хотите, и размер слова со знаком.
lower_bound = 999; upper_bound = 1000; is_signed = true; word_length = 16;
Найти область значений fi
объект с заданным размером слова и со знаком, используйте range
функция.
[Q_min, Q_max] = range(fi([], is_signed, word_length, 0));
Чтобы найти наклон и сместить, решите систему уравнений:
lower_bound = slope * Q_min + bias
upper_bound = slope * Q_max + bias
Перепишите эти уравнения в матричной форме.
Решите для наклона и смещения.
A = double ([Q_min, 1; Q_max, 1]); b = double ([lower_bound; upper_bound]); x = A\b; format long g
Чтобы найти наклон или точность, вызывают первый элемент вектора наклонного смещения, x
.
slope = x(1)
slope = 1.52590218966964e-05
Чтобы найти смещение, вызовите второй элемент векторного x
.
bias = x(2)
bias = 999.500007629511
Создайте numerictype
объект с наклонным масштабированием смещения.
T = numerictype(is_signed, word_length, slope, bias)
T = DataTypeMode: Fixed-point: slope and bias scaling Signedness: Signed WordLength: 16 Slope: 1.5259021896696368e-5 Bias: 999.500007629511
Создайте fi
объект с numerictype
T
.
a = fi(999.255, T)
a = 999.254993514916 DataTypeMode: Fixed-point: slope and bias scaling Signedness: Signed WordLength: 16 Slope: 1.5259021896696368e-5 Bias: 999.500007629511
Проверьте что fi
возразите, что вы создали, имеет правильные спецификации путем нахождения области значений a
.
range(a)
ans = 999 1000 DataTypeMode: Fixed-point: slope and bias scaling Signedness: Signed WordLength: 16 Slope: 1.5259021896696368e-5 Bias: 999.500007629511