«Имитация» 64-битного целого числа двумя 32-битными целыми числами

Я пишу очень требовательную к вычислениям процедуру для мобильного устройства, и я ограничен 32-битными процессорами. По сути, я выполняю точечные произведения огромных наборов данных (> 12k 16-битных целых чисел со знаком). Операции с плавающей запятой просто слишком медленные, поэтому я искал способ выполнить те же вычисления с целочисленными типами. Я наткнулся на то, что называется арифметикой с плавающей запятой (стр. 17 в связанной статье). Он выполняет довольно хорошую работу, но теперь я столкнулся с проблемой того, что 32 бита просто недостаточно для хранения результатов моих вычислений с достаточной точностью.

Чтобы уточнить, причина недостаточной точности в том, что я пришлось бы резко снизить точность каждого из элементов моих массивов, чтобы в итоге число соответствовало 32-битному целому числу. Это суммирование ~ 16000 вещей, которое делает мой результат таким огромным.

Есть ли способ (я бы хотел получить ссылку на статью или учебное пособие) использовать два 32-битных целых числа в качестве старшего и наименее значащего слова и определяют для них арифметические операции (+, -, *, /) для эффективной обработки данных? Кроме того, возможно, есть лучшие способы сделать такие вещи? Есть ли проблема с таким подходом? Я довольно гибок в использовании языка программирования. Я бы предпочел C / C ++, но Java тоже работает. Я уверен, что кто-то делал это раньше.

5
задан Phonon 10 June 2011 в 14:45
поделиться