Fletcher32 : Wikipedia의 360 제한이 잘못 되었나요?

토마스 뮬러

Fletcher 체크섬에 대한 Wikipedia 기사 (현재)에 따르면 Fletcher 32의 경우 360 단계 후에 합계를 줄여야합니다 . 그러나 내 테스트에 따르면 720 단계 후에는 충분합니다. Wikipedia의 360 제한이 단순히 잘못되었거나 테스트에서 실수를 했습니까?

다른 가능한 최적화에 대한 보너스 포인트 :-) 제한을 하드 코딩하는 경우를 제외하고.

내 테스트 케이스 (Java, C 또는 C #에도 동일하게 적용됨) :

public static void main(String... args) {
    byte[] data = new byte[2 * 1024];
    Arrays.fill(data, (byte) 255);
    for (int limit = 1; limit <= 721; limit++) {
        System.out.println("Test limit " + limit);
        for (int i = 0; i < data.length; i += 2) {
            if (getFletcher32(data, i, 1) != getFletcher32(data, i, limit)) {
                System.out.println("Stop at limit=" + limit + " index=" + i);
                return;
            }
        }
    }
}

// bytes: the data
// length: the number of bytes (must be an even number)
// limit: when to reduce the sums (only used for testing)
static int getFletcher32(byte[] bytes, int length, int limit) {
    int s1 = 0xffff, s2 = 0xffff;
    for (int i = 0; i < length;) {
        for (int end = Math.min(i + limit, length); i < end;) {
            int x = ((bytes[i++] & 0xff) << 8) | (bytes[i++] & 0xff);
            s2 += s1 += x;
        }
        s1 = (s1 & 0xffff) + (s1 >>> 16);
        s2 = (s2 & 0xffff) + (s2 >>> 16);
    }
    s1 = (s1 & 0xffff) + (s1 >>> 16);
    s2 = (s2 & 0xffff) + (s2 >>> 16);
    return (s2 << 16) | s1;
}

테스트 결과 :

Test limit 1
Test limit 2
...
Test limit 720
Test limit 721
Stop at limit=721 index=721

결과는 제한 1에서 최대 720까지 동일하며 제한 721에서만 체크섬이 다릅니다 (잘못된 의미).

토마스 뮬러

이제 내 실수를 깨달았고 Wikipedia 내 구현이 모두 올바른지 확인했습니다.

그 이유는 Wikipedia 기사에서는 360 단어 (각 단어 2 바이트)의 제한을 사용하는 반면 내 구현은 720 바이트 제한을 사용하기 때문 입니다.

최적화에 관해서 : 아마도 최종 감소 단계가 약간 단순화 될 수 있지만 그다지 변하지 않을 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

요일이 잘못 되었나요?

분류에서Dev

정의되지 않은 참조 : 무엇이 잘못 되었나요?

분류에서Dev

TypeError : 잘못된 rect 할당, 무엇이 잘못 되었나요?

분류에서Dev

BeautifulSoup 예제처럼 ... 무엇이 잘못 되었나요?

분류에서Dev

BeautifulSoup 예제처럼 ... 무엇이 잘못 되었나요?

분류에서Dev

R 윤활제. 무엇이 잘못 되었나요?

분류에서Dev

Lubuntu 14.10의 알림에 줄이 있습니다. (아래 이미지 참조) 무엇이 잘못 되었나요?

분류에서Dev

Xcode5의 앱 아이콘은 항상 비어 있습니다. 무엇이 잘못 되었나요?

분류에서Dev

무엇이 잘못 되었나요? 서버 응답 메시지의 다른 결과

분류에서Dev

트리거 오라클 : 무엇이 잘못 되었나요?

분류에서Dev

WHEA_UNCORRECTABLE_ERROR BSOD-무엇이 잘못 되었나요?

분류에서Dev

왜 영화 클립이 잘못 되었나요?

분류에서Dev

NSDate dateFromString 2 개월이 잘못 되었나요?

분류에서Dev

다트 타이머가 잘못 되었나요?

분류에서Dev

SyntaxError : missing) after argument list-무엇이 잘못 되었나요?

분류에서Dev

jQuery : 여기서 무엇이 잘못 되었나요?

분류에서Dev

Railo 4.2.1.008 Error (missinginclude) 무엇이 잘못 되었나요?

분류에서Dev

makefile : ifeq-무엇이 잘못 되었나요?

분류에서Dev

svn 덤프 파일의 형식이 잘못되었거나 형식이 잘못된 것 같습니다.

분류에서Dev

MasterDetail ListView 및 편집 가능한 ContentPresenter : 무엇이 잘못 되었나요?

분류에서Dev

OCaml의 n 번째 요소 함수에 문제가 있습니다. 나는 무엇이 잘못되었는지 찾을 수 없다

분류에서Dev

XML 구문 분석 오류 : <id> 요소의 형식이 잘못되었습니다 (잘못된 토큰).

분류에서Dev

하나 이상의 잘못된 서명이 발견되었습니다.

분류에서Dev

하나 이상의 매개 변수 값이 잘못되었습니다. dynamodb

분류에서Dev

하위 쿼리가 SQL 쿼리에서 둘 이상의 값을 반환했습니다. 그게 무슨 뜻인가요?, 무엇이 잘못 되었나요?

분류에서Dev

Select 구성 요소의 MaterialUI 레이블 위치가 잘못되었습니다.

분류에서Dev

양식 요소의 오른쪽 정렬이 잘못되었습니다.

분류에서Dev

나와 phpStorm에 의한 파일 경로는 맞지만 실제 세계에서는 잘못되었습니다.

분류에서Dev

이 커스텀 리 액트 훅 (useLocalStorage)이 어디에서 잘못 되었나요?

Related 관련 기사

  1. 1

    요일이 잘못 되었나요?

  2. 2

    정의되지 않은 참조 : 무엇이 잘못 되었나요?

  3. 3

    TypeError : 잘못된 rect 할당, 무엇이 잘못 되었나요?

  4. 4

    BeautifulSoup 예제처럼 ... 무엇이 잘못 되었나요?

  5. 5

    BeautifulSoup 예제처럼 ... 무엇이 잘못 되었나요?

  6. 6

    R 윤활제. 무엇이 잘못 되었나요?

  7. 7

    Lubuntu 14.10의 알림에 줄이 있습니다. (아래 이미지 참조) 무엇이 잘못 되었나요?

  8. 8

    Xcode5의 앱 아이콘은 항상 비어 있습니다. 무엇이 잘못 되었나요?

  9. 9

    무엇이 잘못 되었나요? 서버 응답 메시지의 다른 결과

  10. 10

    트리거 오라클 : 무엇이 잘못 되었나요?

  11. 11

    WHEA_UNCORRECTABLE_ERROR BSOD-무엇이 잘못 되었나요?

  12. 12

    왜 영화 클립이 잘못 되었나요?

  13. 13

    NSDate dateFromString 2 개월이 잘못 되었나요?

  14. 14

    다트 타이머가 잘못 되었나요?

  15. 15

    SyntaxError : missing) after argument list-무엇이 잘못 되었나요?

  16. 16

    jQuery : 여기서 무엇이 잘못 되었나요?

  17. 17

    Railo 4.2.1.008 Error (missinginclude) 무엇이 잘못 되었나요?

  18. 18

    makefile : ifeq-무엇이 잘못 되었나요?

  19. 19

    svn 덤프 파일의 형식이 잘못되었거나 형식이 잘못된 것 같습니다.

  20. 20

    MasterDetail ListView 및 편집 가능한 ContentPresenter : 무엇이 잘못 되었나요?

  21. 21

    OCaml의 n 번째 요소 함수에 문제가 있습니다. 나는 무엇이 잘못되었는지 찾을 수 없다

  22. 22

    XML 구문 분석 오류 : <id> 요소의 형식이 잘못되었습니다 (잘못된 토큰).

  23. 23

    하나 이상의 잘못된 서명이 발견되었습니다.

  24. 24

    하나 이상의 매개 변수 값이 잘못되었습니다. dynamodb

  25. 25

    하위 쿼리가 SQL 쿼리에서 둘 이상의 값을 반환했습니다. 그게 무슨 뜻인가요?, 무엇이 잘못 되었나요?

  26. 26

    Select 구성 요소의 MaterialUI 레이블 위치가 잘못되었습니다.

  27. 27

    양식 요소의 오른쪽 정렬이 잘못되었습니다.

  28. 28

    나와 phpStorm에 의한 파일 경로는 맞지만 실제 세계에서는 잘못되었습니다.

  29. 29

    이 커스텀 리 액트 훅 (useLocalStorage)이 어디에서 잘못 되었나요?

뜨겁다태그

보관