이 함수는리스트 g에서 비정상적인 값을 반환합니다. 그것은 32774, 65548, 1048768을 돌려 주어야하지만 값은 더 큰 슬링키처럼 전체 바이너리를 처리하는 것과 같습니다. LSB를 실제 이동하는 대신 MSB로 이동하는 것과 같습니다.파이썬 --- GF (2) 필드에서 곱하기
def multiply(a,b): #a,b are values like 1101010001....
a = min(a,b); b = max(a,b)
g = []; bitsa = "{0:b}".format(a) #returns product of 2 polynomials in gf2
[g.append((b<<i)*int(bit)) for i,bit in enumerate(bitsa)]
return reduce(lambda x,y: x+y,g)
이 내가 함께 테스트하고있는 무슨이다 :
여기 함수의
x = int(str(100000000000011),2)
y = int(str(1000110),2)
x1 = int(str(111),2)
y1 = int(str(11),2)
x2 = int(str(0001),2)
y2 = int(str(1111),2)
print "multiply: ",multiply(x,y)
print "multiply: ",multiply(x1,y1)
print "multiply: ",multiply(x2,y2)
만 X1, Y1 지금 작동, 다른 사람은하지 않습니다. 당신이 볼 수있는
100000000000011
1000110
---------------------
100000000000011
100000000000011
100000000000011
---------------------
100011000000011001010
따라서, 제품을 얻기 위해, 모두 바이너리가 인덱스 1의 검사 및 그 기반으로의 첨부가 필요합니다 : 이 마지막 입력에 대한 전체 방정식이다. 나는 그 부분을 어떻게 맞추는 지, 어떻게해야 올바른지를 알 수는 없다. x1, y1이 작동하는 이유와 다른 이유가 무엇인지 이해하려고 시도합니다.
편집 :
나는 그냥 J0HN의 대답은 정확 것으로 보인다 것을 분명히하고자하고 또한 자신이 참조 된 온라인 도구에서 오류를 붙 잡았다. 이런 식으로 유한 필드 수학으로 작업 할 때 기본 제공 함수가 우선 표시됩니다. 이 문제를 겪고있는 사람이라면 누구나 그 날카로운 관측 기술 - 지불 - 청구서에 대한 투표권을 보여줄 것입니다.
감사합니다. 이제 댓글이 정확해야합니다.당신 말이 맞아요, 내장을 사용 하겠지만 x1, y1 조합에서는 작동하지 않아서 의심스러워 보입니다. min, max 문이 필요했습니다 (가장 큰 값을 반복하기 때문에 생각합니다). 그것은 여전히 마지막 사건을 위해 작동하지 않습니다,이 unb.edu 계산기 (테스트를위한 값으로 사전 설정)를 참조하십시오 또한 x1, y1에 대한이 계산기를 확인하시기 바랍니다 - 내장과 이것의 차이를 볼 수 ---- http://www.ee.unb.ca/cgi-bin/tervo/calc.pl?num=100000000000011&den=1000110&f=m&e=1&p=1&m=1 – stackuser
사용하는 도구가 잘못 나온 것 같습니다. 예를 들어 3 자릿수에서 4 자로 이월됩니다. 그럴 수 있단 말인가? 또한 목록에 대해 연산을 수행해야한다면 - 곱하기는 이제는 수행하지 않을 것입니다. 다시리스트에 정의 된 연산자가 없기 때문입니다. – J0HN
x1 * y1은 1001을 제공하고 carryover는 1101이어야합니다.하지만 내장 된 것이 제공하는 10101은 아닙니다. 그래서 이것은 또한 틀린 것입니다 --- http://www.ee.unb.ca/cgi-bin/tervo/calc.pl?num=1000110&den=100000000000011&f=d&e=1&p=1&m=1 ---- 형식 (x/y), "{0 : b}"형식 (x % y)은 11101010111을 반환하므로 기본 제공 권한이 있으므로이 도구는 보이지 않습니다 모든 테스트 예제에서 바이너리를 올바르게 처리하고 있습니까? – stackuser