Я недавно работал над оптимизацией SSE для алгоритма обработки видео.Мне нужно написать точно такой же алгоритм в коде C, чтобы проверить правильность алгоритма.Я несколько раз забывал об этом факте, что делает результаты двух реализаций различными.
Я могу изменить реализацию C, чтобы они соответствовали, так как это различие не имеет значения.Но почему эти инструкции разработаны так?Есть ли какая-то математическая причина?
Справочник по инструкциям Intel только упоминает это поведение и не объясняет почему.Я также попробовал поискать в Google, но ничего не смог найти по этому поводу.
ОБНОВЛЕНИЕ:
Благодаря Ответ Павла .Я не понял, что это проблема округления / усечения.Но так как оба операнда являются целыми числами, единственная дробь будет 0,5, и у нее есть 2 "ближайших целых числа".AFAIK Есть несколько методов округления для этой ситуации.Почему в инструкциях специально используется округление?Нужно ли округлять большинство связанных приложений?