ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
10 июля
323077 Топик полностью
sbb (14.04.2012 23:42, просмотров: 73) ответил Д.ARMоед на Вы не тупите, корень для масштабирования придётся вычислить. А при сравнении можно обойтись без корня.
Можно масштабировать без корня. Перед перемножением квадратов модулей векторов в знаменателе скалярного произведения определяется разрядность каждого из множителей (считаем ведущие нули и т.п.). Дальше каждый сомножитель сдвигается на столько разрядов, чтоб их произведение не вышло за заданную разрядность (например, 31 бит). Естественно модуль меньшей разрядности делится меньше или не делиться вовсе, чтоб выровнять относительные ошибки. Числитель скалярного произведения перед возведением в квадрат сдвигается на половину от суммарного сдвига в знаменателе. Он заведомо по модулю не больше знаменателя и после возведения в квадрат переполнения не будет. Итого получим квадрат скалярного произведения в виде дроби без переполнения разрядности и ограниченной потерей точности. Целочисленный корень тоже не так страшно, но ИМХО масштабирование и проще и точнее.