Неподписанное 128-разрядное разделение на 64-разрядной машине

StackOverflow https://stackoverflow.com/questions/1870158

  •  18-09-2019
  •  | 
  •  

Вопрос

У меня есть 128-битное число, хранящееся в виде 2 64-битных чисел ("Hi" и "Lo").Мне нужно только разделить его на 32-битное число.Как я мог бы это сделать, используя собственные 64-разрядные операции из CPU?

(Пожалуйста, обратите внимание, что мне НЕ нужна библиотека произвольной точности.Просто нужно знать, как сделать это простое разделение, используя собственные операции.Спасибо вам).

Это было полезно?

Решение

Если вы сохраняете значение (128 бит), используя максимально возможное собственное представление, которое может обрабатывать ваша архитектура (64 бита), у вас возникнут проблемы с обработкой промежуточных результатов деления (как вы уже обнаружили :) ).

Но вы всегда можете использовать меньшее представление.Как насчет ЧЕТЫРЕХ 32-битных чисел?Таким образом, вы могли бы использовать собственные 64-битные операции без проблем с переполнением.

Простую реализацию (на Delphi) можно найти здесь.

Другие советы

Немного кода на языке Си здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top