Самый быстрый способ найти частное, разделив два числа - PullRequest
3 голосов
/ 16 мая 2011

Я должен сделать некоторую логику, основанную на следующей реализации.

У меня есть большое число до 36 цифр, например 913695089923267549815145223638290430 (случайным образом генерируется другим приложением). Мне нужно разделить его на любое число меньшей длины, скажем, 70368844197664; (случайным образом сгенерированное другим приложением).

Для моего кода важна только последняя цифра фактора перед десятичной (т. Е. 4). Цель состоит в том, чтобы проверить, является ли частное четным или нечетным и, если возможно, значение последней цифры тоже.

Я не могу использовать простые функции БД, такие как модуль или деление, так как это занимает много времени. Есть ли более эффективный способ? Любые предложения будут высоко оценены.

Большое спасибо.

С уважением Neeraj

1 Ответ

5 голосов
/ 16 мая 2011

То, что вы хотите сделать, это в значительной степени определение «арифметики по модулю».Если встроенная арифметика в вашей базе данных не может выполнить вычисления достаточно быстро, я не уверен, что вы могли бы сделать, чтобы улучшить этот путь, если бы вы не написали собственный движок базы данных или не приобрели более мощное оборудование.

Проблема действительно в скорости арифметики, или это поиск записей или индексация?Я имею в виду, что если вы говорите что-то вроде:

select ... whatever ... from table1 join table2 using (someid)
where (table1.q / table2.d) % 10 = 4

и у вас нет индекса для функции (table1.q / table2.d)% 10, для этого потребуется прочитать БДкаждую запись, выполнить расчет, а затем выбрать те, которые дают правильный ответ.Возможно, ваша проблема не в арифметике, а в индексации.

...