Операция обратного умножения, которая имеет overflowed

Учитывая код:

uint Function(uint value)
{
  return value * 0x123456D;
}

Ввод значения 0x300 дает результат 0x69D04700. Это только младшие 32 бита результата. Учитывая результат 0x69D04700 и коэффициент 0x123456D, возможно ли получить все числа, такие как (значение * 0x123456D) & 0xFFFFFFFF = 0x69D04700, быстрым способом?

Редактировать: Показанный мной код является псевдокодом - я не могу расширить диапазон тип возврата.

6
задан jakobbotsch 4 August 2011 в 17:12
поделиться