지정된 소수의 부정확성을 허용하면서 부동 소수점 배열을 '체크섬'하는 빠르고 쉬운 방법은 무엇입니까?시끄러운 부동 소수점 배열을 '체크섬'하는 방법은 무엇입니까?
이론적으로는 무한 정밀도로 동일한 배열을 출력해야하는 두 개의 알고리즘이 있습니다. 그러나 그것들은 다르게 작동하기 때문에 부동 소수점 오차는 다르게 축적 될 것입니다. 그러나 배열 길이는 정확히 같아야합니다. 배열이 똑같은지 테스트하는 빠르고 쉬운 방법이 필요합니다. 물론 숫자를 쌍으로 비교할 수 있으며 최대 오류를보고 할 수 있습니다. 그러나 하나의 알고리즘은 C++에 있고 다른 하나는 Mathematica에 있고 나는 파일에 숫자를 쓰거나 한 시스템에서 다른 시스템으로 그것을 붙여 넣는 것을 원하지 않습니다. 그래서 간단한 체크섬을 원합니다.
간단히 배열의 모든 숫자를 더할 수 있습니다. 배열 길이가 N이고 각 숫자에서 0.0001의 오류를 허용 할 수 있다면 abs(sum1-sum2)<0.0001*N
인지 확인합니다. 하지만이 단순한 '체크섬'은 견고하지 않습니다. 하나의 엔트리에서 +10의 에러와 다른 엔트리에서 -10의 에러. (그리고 어쨌든, 확률 이론은 N이 아닌 sqrt (N)과 같이 성장할 것이라고 말합니다.) 물론 체크섬은 데이터의 덩어리에 대한 낮은 차원의 요약이므로 누락 될 수 있습니다. 일부 오류 대부분의 경우 ... 그러나 간단한 체크섬은 그럼에도 불구하고 악의가없는 버그 유형 오류를 찾는 데 유용합니다.
또는 2 차원 체크섬 [sum(x[n]), sum(abs(x[n]))]
을 만들 수 있습니다. 그러나 내가 할 수있는 최선의 방법, 즉 sum(x[n])
에 "더 직각"이 될 수있는 다른 기능이 있습니까? 일부 임의의 함수 (예 : [sum(f1(x[n])), sum(f2(x[n]))]
, 그러면 '원시 오류 허용치'는 '체크섬 오류 허용치'로 어떻게 변환되어야합니까?
저는 C++로 프로그래밍하고 있습니다 만, 어떤 언어로든 답을 볼 수있어서 기쁩니다.
이것은 체크섬의 목적이 아닙니다. 체크섬은 허용 오차 테스트가 아닌 비트 정밀도를 결정하기위한 것입니다. –
흥미로운 질문입니다. 아마도 로우 패스 필터링과 함께 데이터를 푸리에 변환한다고 생각해 봤나? – thb
@Oli : 내 질문은 내가 뭘 찾고 있는지 명확하게하고, 나는 내가 원하는 것을 더 잘 알지 못한다. 더 나은 단어를 알고 있다면 알려 주시면 대신 사용하겠습니다. 지금은 체크섬이라는 단어를 따옴표로 묶었습니다. – DamonJW