XOR Float для последовательностей Соболя - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь построить квазислучайный генератор, используя структуру последовательностей Соболя. Последний шаг требует выполнения XOR между числами с плавающей запятой, как показано ниже:

XOR между числами с плавающей запятой: пример

Я пробовал использовать код из первого ответа здесь: XOR между числами с плавающей запятой в python, но возникли проблемы, и мне пришлось его настроить (у меня было несколько ошибок, возможно, из-за того, что я запустил Python 3). Итак, новый код выглядит так:

from struct import pack, unpack
def xor_float(f1, f2):
   f1 = int(''.join(hex(e)[2:] for e in struct.pack('d',f1)),16)
   f2 = int(''.join(hex(e)[2:] for e in struct.pack('d',f2)),16)
   xor = f1 ^ f2
   xor = "{:016x}".format(xor)
   xor = ''.join(chr(int(xor[i:i+2],16)) for i in range(0,len(xor),2))

return struct.unpack('d',xor.encode('utf-8'))[0]

, что дает неверный результат. Мне трудно понять, почему, поскольку я не так хорошо знаком с манипуляциями с байтами в Python.

Кроме того, я не совсем понимаю, что именно делает XOR для чисел с плавающей запятой, поэтому мне сложно придумать собственное представление. Может ли кто-нибудь помочь мне исправить код или понять лог c, стоящий за этим последним шагом генерации последовательности Соболя?

Спасибо,

Лучшее

...