Почему java не использует long [] в поле mag BigInteger? - PullRequest
1 голос
/ 02 августа 2020

Я считаю, что 64-битная JVM long [] намного более эффективна, чем int [], и может значительно ускорить операции RSA.

Carry - проблема в long [ ], но мы можем использовать некоторые собственные методы для принудительного использования long без знака, например long z = u64add(x, y, cr), здесь cr - это boolean[], может заменить long z = x + y.

1 Ответ

4 голосов
/ 02 августа 2020

BigInteger поддерживает multiply(), а не только add(). Поскольку операция multiply() является более дорогостоящей, ее скорость также имеет наибольшее значение для алгоритмов.

Умножение двух 64-битных целых чисел дает 128-битный результат. В Java нет 128-битного целочисленного типа, поэтому получение правильного результата - это не просто «выполнить операцию и сдвинуть несколько битов». Вам нужно будет разделить два числа на 4 32-битных части, умножить их, а затем составить результат. Или добавьте JVM intrinsi c, чтобы можно было использовать собственную 128-битную операцию. Дело не в том, что невозможно сделать, это скорее вопрос рентабельности.

...