Skip to content

v0.231.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 23:51
· 44 commits to main since this release
55cfa26

kanpic v0.231.0

v0.231.0

자리를 잘라 내는 셈이 십진수를 따른다

ROUNDROUNDDOWN 은 이미 사람이 적은 십진수를 기준으로 셈하는데,
TRUNCPERCENTRANK 두 곳만 아직 이진 실수로 자리를 밀고 있었습니다.
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.go
    • TestTruncCutsDecimalDigitsLikeRoundDown — 엑셀이 내는 값을 표로 두고, 0.001 부터 3 까지 3000 개의 수를 자릿수 -2..4 로 잘라 TRUNCROUNDDOWN 이 한 값이라도 어긋나는지
    • TestOutlandishDigitCountsDoNotStallRoundingROUND·ROUNDUP·ROUNDDOWN·TRUNC·PERCENTRANK 에 ±999999999 자리를 주고 20초 안에 제 답을 내는지, FIXED 가 내는 글자의 길이가 묶여 있는지
  • internal/formula/functions_distribution_test.go
    • TestSpreadAndRangeStatistics — 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_IDBOOTSTRAP_ADMIN_PASSWORD를 함께 지정합니다.
  • 무결성 검증 파일: kanpic-v0.231.0.tar.gz.sha256