문서유형ㅣ기술정보
분야ㅣ모니터링/점검
적용제품버전ㅣ7FS02, 7FS02PS
문서번호ㅣTMOTI066
개요
소수점 연산 후 Trunc 시 정수값이 기대와 다른 경우 테스트
- 내용 : 소수점 자리수 이상 넘어갈시 발생할수 있는 trunc 후 정수 차이에 대한 테스트
- 환경 : Tibero 7.2.2 , 7.2.3 이상
방법
Tibero 에서 소수점 반올림 정책
Tibero에서 지원하는 소수점 자리 수 및 정책
- 지원 자리 수 : number형 기준 소수점 38자리까지가 공식 지원 범위이나, 40자리까지 확장 가능합니다.
- 자리 수 초과 시 정책 : 초과한 자리 수에서 반올림을 수행합니다
발생 가능한 케이스
소수점이 9가 반복되고 자리 수를 넘길 시
- XXX.XXXX999999...와 같은 형태의 숫자는 올림 또는 버림 여부에 따라 XXX.XXXX 또는 XXX.XXX(X+1)로 달라질 수 있습니다.
- 9가 연속되는 소수가 자리 수를 초과하려면 매우 큰 수끼리의 연산이 필요하므로, 실제 환경에서는 발생하기 어렵습니다.
--반올림이 문제가 되는 경우
원래값 : 148950.999999999999999999999999999999999999999(9)
반올림 : 148951.000000000000000000000000000000000000000
이 경우 정수 분이 달라지므로 영향도가 생긴다
--하지만 위의 경우를 단순 나누기로 만들려면
999999999999999999999999999999
/1000000000000000000000000000000000000000
정도의 대형 연산이 필요해 발생하기 힘들다
같은 수로 나눈 뒤 곱하는 연산
- 어떤 수를 나누었을 때 소수점 38자리를 초과하는 결과가 나온 상태에서, 나눈 값과 동일한 값을 다시 곱할 경우 문제가 발생할 가능성이 있습니다.
- 원래대로라면 기존 값과 동일한 값이 나와야 하나, 반올림 과정에서 올림/버림 처리로 인해 결과가 달라질 수 있습니다.
- 나누기 결과의 마지막 자리에서 올림이 발생하면 조금 큰 값이, 버림이 발생하면 조금 작은 값이 나옵니다.
- 이 상태에서 나눈 수를 다시 곱하면 (X-1).99999....9999 ~ X.000000.....1 사이의 결과가 나오게 되며, trunc 수행 시 X-1 또는 X로 나뉘게 됩니다.
반복수가 아니더라도 발생할 수 있는 사례로, 461730과 같이 trunc 결과값이 1만큼 작게 나오는 경우도 있을 수 있습니다.
결론
- 같은 수로 나누고 다시 곱하더라도 동일한 숫자가 나온다고 보기는 어렵습니다.
- 소수점 38자리 이하는 매우 작은 범위이므로, 일반적으로는 영향도가 없습니다.
- 다만 연산에 따라서는 trunc 수행 시 정수부가 바뀔 정도의 차이가 발생할 수 있습니다.