Это (AFAIK) конкретный вопрос в этой общей теме .
Вот ситуация:
У меня есть встроенная система (игровая консоль) на основе 32-разрядного микроконтроллера RISC (вариант NEC V810). Я хочу написать математическую библиотеку с фиксированной запятой. Я прочитал эту статью , но прилагаемый исходный код написан на сборке 386, поэтому его нельзя ни использовать напрямую, ни легко изменять.
V810 имеет встроенное умножение / деление целого числа, но я хочу использовать формат 18.14, упомянутый в статье выше. Это требует деления 64-битного int на 32-битное int, а V810 только (со знаком или без знака) выполняет 32-битное / 32-битное деление (что дает 32-битное отношение и 32-битное значение).
Итак, мой вопрос: как мне симулировать 64-битное / 32-битное деление с 32-битным / 32-битным (чтобы обеспечить предварительное смещение дивиденда)? Или, если взглянуть на проблему по-другому, как лучше разделить фиксированную точку 18,14 на другую, используя стандартные 32-битные арифметические / логические операции? («лучший» означает самый быстрый, самый маленький или оба).
Алгебра, сборка (V810) и псевдокод все в порядке. Я буду звонить код из C.
Заранее спасибо!
РЕДАКТИРОВАТЬ: Каким-то образом я пропустил этот вопрос ... Тем не менее, он все еще нуждается в некоторой модификации, чтобы быть суперэффективным (он должен быть быстрее, чем div с плавающей точкой, предоставляемый v810, хотя это может быть уже ...), так что не стесняйтесь делать мою работу за меня в обмен на очки репутации;) (и, конечно, кредит в моей библиотечной документации).