Чистое умножение старших -бит в ассемблере?

Для реализации действительных чисел от 0 до 1 обычно используются числа с плавающей запятой ANSI или удвоения. Но числа с фиксированной точностью от 0 до 1 (десятичных знаков по модулю 1 )могут быть эффективно реализованы как 32-битные целые числа или 16-битные слова, которые складываются как обычные целые числа/слова, но умножаются «неправильным образом», что означает, что когда вы умножаете X на Y, вы сохраняете старшие биты произведения. Это эквивалентно умножению 0.X и 0.Y, где все биты X находятся за десятичной точкой. Точно так же числа со знаком между -1 и 1 также могут быть реализованы таким образом с одним дополнительным битом и сдвигом.

Как реализовать фиксированную -точность по модулю 1 или по модулю 2 в C (, особенно с использованием MMX или SSE )? Я думаю, что это представление может быть полезно для эффективного представления унитарных матриц, для численного интенсивного физического моделирования. Это позволяет большему количеству MMX/SSE иметь целочисленные значения, но вам нужен доступ более высокого уровня к PMULHW.

5
задан Gilles 'SO- stop being evil' 7 May 2012 в 20:33
поделиться