Я пытаюсь построить квазислучайный генератор, используя структуру последовательностей Соболя. Последний шаг требует выполнения 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, стоящий за этим последним шагом генерации последовательности Соболя?
Спасибо,
Лучшее