위의 가정에 따르면 결과적으로 Y 값을 직렬화하는 데 필요한 기대 비트 수가 32비트에서 4.2로 줄었다. 위치 값 하나마다 약 3바이트꼴로 절약한 것이다. 32명의 플레이어가 초당 30회 정도 위치를 바꾼다면 Y 값 하나 최적화했을 뿐인데도 엄청난 절약이 가능하다는 결론에 이르게 된다.
압축 효율을 더 높일 수도 있다. 예를 들어 통계를 얻어본 결과 고양이가 바닥에 있는 경우가 아니라면 대개 천장에 매달려 있었다고 가정해 보자. 천장의 높이가 100이라면 직렬화 코드에 두 번째 기댓값 여부 검사를 넣어 천장에 매달린 경우의 위치를 압축할 수 있다.10
void OutputMemoryBitStream::WritePos(const Vector3& inVector) { Write(inVector.mX); Write(inVector.mZ); if (inVector.mY == 0) { Write(true); } else if (inVector.mY == 100) { Write(true); Write(false); } else { Write(false); Write(inVector.mY); } }
10 역주 이 코드에서는 간결한 설명을 위해 float 값을 등가 연산자로 직접 비교하는데, 부동소수점 포맷에 내포된 오차로 인해 상상도 못 한
버그가 생길 수 있다. 실전에서는 fabs(inVector.mY - 100.0f) 0.001f 식으로 하는 것이 안전하다.