한 자리씩 바뀌도록 만든 부호라고 한 자리 오류의 값 차이도 작을까? 자체 교육용 모형으로0·1의 m자리 표기 b를 다음 부호 g로 바꾼다. ⊕는 두 값이 같으면0,다르면1인 연산이며 b_m=0으로 둔다.
가장 높은 자리부터 b_(m−1)=g_(m−1)을 구하고 아래로 내려가면 모든 입력을 유일하게 복원한다. 같은 값을 두 번 더하는 ⊕ 연산은0을 만들므로 일반식은 다음과 같다.
이제 g_k 하나만 잘못 읽어0과1을 뒤집는다. 역변환 식에 그 자리가 들어 있는 b_0,…,b_k가 모두 바뀐다. i>k의 식에는 g_k가 없어 상위 자리는 그대로다. 부호의 한 오류가 원래 표기의 k+1자리 오류를 만드는 것이다.
하위 k+1자리의 원래 정수값을 r라 하고 N=2^(k+1)−1이라 두자. 모두 뒤집으면 그 부분은 N−r가 된다. 상위 부분은 같아서 전체값의 차이는 N−2r다.
r=0이나N이면 등호를 얻는다. m=4,k=2에서 입력0000의 부호0000을0100으로 잘못 읽으면0111,즉7로 복원된다. 이는 실제 장치의 오류율 측정이 아닌 정의로 만든 예다.
Cook의 글은 Gray code의 역변환을 설명한다. 새 질문은 그 복원 과정에 단일 오류를 넣어 바뀌는 자리와 오차의 범위를 추적한다. 교사는 “서로 이웃한 수의 부호 변화”와 “읽기 오류 뒤의 복원값 변화”를 다른 사건으로 설명하게 한다.
착안: John D. Cook, Inverse Gray code. 문항·오류 분석은 새로 작성했다.
