Инициализация подразделения Гольдшмидта с использованием CKKSPython

Программы на Python
Anonymous
Инициализация подразделения Гольдшмидта с использованием CKKS

Сообщение Anonymous »

Недавно я обнаружил, что не совсем понимаю, как выполнить инициализацию для деления Гольдшмидта, обозначенную в следующей статье: Саманвая Панда: анализ главных компонентов с использованием CKKS
Гомоморфная схема

На самом деле не объясняется, как найти начальное значение, просто говорится, что мы хотим, чтобы поддерживалось следующее соотношение:

Изображение


У меня есть следующее Код Python:

Код: Выделить всё

def gold_div(a,b):
r = 1/b
for i in range(0,10):
a = r*a
b = r*b
r = 2 + -1*b
return a
который работает, но деление в функции, которая должна быть алгоритмом деления, не имеет особого смысла.

Я подумывал использовать его исходный код, который он ссылается на: Маркштейн, П.: Отдел программного обеспечения и квадратный корень с использованием алгоритмов Гольдшмидта, но я не понимаю, что они делают.
На рисунке ниже показано, что они делают:

Изображение


Я понимаю, что sgn() — это функция, которая по сути просто определяет, является ли b₀ отрицательным или положительным, но на самом деле я этого не знаю. посмотрите, как я могу использовать их Y₀, поскольку он, похоже, заменяет неизвестный Y₀ неизвестным n (таким образом, у нас есть 2 неизвестных). Они также, похоже, просто быстро перепрыгивают через это, поскольку обычно мы просто используем таблицу поиска, которую, я опять же, не верю, что мы можем использовать, поскольку мы используем CKKS.
Единственное, что я вижу что могло бы сработать, так это использовать тот факт, что, поскольку мы делим, мы можем предположить, что b не равен 0, и тем самым мы можем переписать исходное выражение для Y₀ на 3/4*b₀

Подробнее здесь: https://stackoverflow.com/questions/718 ... using-ckks

Вернуться в «Python»