v0.231.0
kanpic v0.231.0
v0.231.0
자리를 잘라 내는 셈이 십진수를 따른다
ROUND 와 ROUNDDOWN 은 이미 사람이 적은 십진수를 기준으로 셈하는데,
TRUNC 과 PERCENTRANK 두 곳만 아직 이진 실수로 자리를 밀고 있었습니다.
0.29 에 100 을 곱하면 28.999999999999996 이므로, 이미 두 자리에 딱 맞는
수인데도 마지막 자리가 깎였습니다.
TRUNC(0.29,2)가 0.28,TRUNC(1.001,3)이 1 이었습니다. 같은 값을
ROUNDDOWN에 물으면 제대로 나왔으니, 한 통합 문서 안에서 이름만 다른 두
함수가 서로 다른 답을 낸 셈입니다.PERCENTRANK({0,1,2,3,4,5,6,7,8},4.6,5)의 순위는 0.575 인데 0.57499 가
나왔습니다.
이제 두 함수 모두 ROUNDDOWN 과 같은 십진 셈을 씁니다. 덤으로 엑셀처럼
자릿수 인수의 소수점 아래를 잘라 내므로 TRUNC(2.345,1.9) 는 한 자리로
읽어 2.3 입니다.
터무니없이 큰 자릿수가 서버를 붙잡지 못한다
자릿수는 사람이 적는 인수입니다. =ROUND(1.5,999999999) 한 칸이
10999999999 을 만드느라 기억 장소를 수백 메가바이트씩 물고 몇 초를
붙잡았고, =FIXED(1.5,999999999) 는 그만큼의 0 을 이어 붙여 기가바이트짜리
글자를 냈습니다. 워크북을 고칠 수 있는 사람이라면 누구나 칸 하나로 서버를
멈춰 세울 수 있었습니다.
float64 가 담는 십진수는 소수점 아래 1074 자리 안에서 끝나므로 400 자리
밖에서는 어떤 반올림도 값을 움직이지 못합니다. 이제 자릿수를 그 범위로
들인 뒤 셈하므로 답은 그대로이고 걸리는 시간만 사라집니다. int 에 담기지
않는 1E+300 같은 자릿수도 같은 자리에서 받아 냅니다.
확인
internal/formula/library_extended_test.goTestTruncCutsDecimalDigitsLikeRoundDown— 엑셀이 내는 값을 표로 두고, 0.001 부터 3 까지 3000 개의 수를 자릿수 -2..4 로 잘라TRUNC과ROUNDDOWN이 한 값이라도 어긋나는지TestOutlandishDigitCountsDoNotStallRounding—ROUND·ROUNDUP·ROUNDDOWN·TRUNC·PERCENTRANK에 ±999999999 자리를 주고 20초 안에 제 답을 내는지,FIXED가 내는 글자의 길이가 묶여 있는지
internal/formula/functions_distribution_test.goTestSpreadAndRangeStatistics— 0.575 를 다섯 자리로 자르는PERCENTRANK
오프라인 설치
이 릴리즈는 웹 자산과 서버 바이너리를 포함한 Docker 이미지 아카이브로 제공됩니다.
sha256sum -c kanpic-v0.231.0.tar.gz.sha256
gzip -dc kanpic-v0.231.0.tar.gz | docker load
docker run --rm -p 8080:8080 \
-e POSTGRES_DSN='postgres://kanpic:password@postgres.internal:5432/kanpic?sslmode=require' \
kanpic:v0.231.0- 필수 런타임 환경 변수:
POSTGRES_DSN - Redis 및 외부 인터넷 연결: 불필요
- 관리자 초기 로그인을 보호하려면
BOOTSTRAP_ADMIN_ID와BOOTSTRAP_ADMIN_PASSWORD를 함께 지정합니다. - 무결성 검증 파일:
kanpic-v0.231.0.tar.gz.sha256