수십억 (10^9)의 배정 밀도 부동 소수점 숫자를 메모리에 저장하고 공간을 절약하고 싶습니다. 이 값들은 수천 개의 순서가있는 집합 (시간 계열)으로 그룹화되며 집합 내에서 값의 차이가 일반적으로 (절대 값과 비교하여) 크지 않다는 것을 알고 있습니다. 또한, 서로에 가까울수록 그 차이가 상대적으로 작을 확률이 높다.비슷한 수의 복식을 여러 개 압축하는 방법은 무엇입니까?
완벽한 적합성은 이전 값과 각 값의 차이 만 저장하는 델타 인코딩입니다. 그러나 데이터의 하위 집합에 무작위로 액세스하기를 원하기 때문에 전체 집합을 순서대로 처리하지 않아도됩니다. 그러므로 필자는 절대 값 (대부분의 경우)의 10 ~ 50 % 범위에있을 것으로 예상되는 델타를 산출하는 전체 폭 기준선에 델타를 사용합니다.
는 I는 다음의 방법으로 간주했다 : 기억하기위한, 고정 된 정밀도의 정수를 더한 하나의 비트로서 저장 될 수있는 0과 1 사이의 값을 산출
- 분할 큰 하나 작은 값을 어느 수를 나눈 값입니다. 이것은 매우 간단하고 만족스러운 압축을 산출하지만 무손실 방법이 아니기 때문에 2 차 선택입니다.
- XOR 두 값의 IEEE 754 binary64로 인코딩 된 표현을 사용하고 지수의 시작 부분에 0의 긴 뻗기의 길이와 다른 가수를 더한 가수를 더한 값을 저장합니다. 여기에서는 압축을 판단하는 방법을 확실히 알지 못하지만 대부분의 경우 압축이 잘되어야한다고 생각합니다.
표준 방법이 있습니까? 위의 접근 방식에 어떤 문제가있을 수 있습니까? 다른 솔루션을 보거나 사용 해본 적이 있습니까?
Z- 점수를 가르쳐 주셔서 고맙습니다. 첫 번째 접근 방식으로 시도한 것을 일반화 한 것입니다. 불행하게도 실제, 실제 소스는 정밀도가 매우 다양하며 데이터의 정밀도에 대한 요구는 내 소프트웨어를 사용하는 응용 프로그램에 따라 다르기 때문에 들어오는 데이터의 노이즈에 대해 어떤 가정도 할 수 없습니다. –