← 목록
기타 2026-06-10 3KB 읽기 3분

crownyc VM 나눗셈 버그 수정 + 재빌드 (2026-06-10)

개요

순수 한선씨 CAD 커널 작업 중(챔퍼 면적 오답 추적) crownyc VM의 정수 나눗셈 silent 버그를 발견·수정·재빌드했다. 한선씨 전체 생태계에 영향을 주던 핵심 결함.

발견

  • 증상: 100/2 = 43, 256/2 = 124, 2944/2 = 1096 등 silent 오답(값 자체가 틀리고 후속 연산 전파: 43×2=86). 비단조·데이터의존(240·400·500/2는 정상).
  • 표시(문자열변환) 버그 아님 — 저장값이 실제로 틀림(y==43 참 확인).
  • 교차검증: CrownyTVM 100/2=50 정상 → crownyc 전용 버그.
  • 원인: crownyc.c:2696 cube_divmod 의 trit-greedy 롱디비전이 불변식 |r|≤|b|/2를 못 지킴(특히 짝수 제수 경계 r=b/2 → shift 후 3b/2+1, 단일 감산 부족 → 몫 자릿수 오류). Phase2 정규화는 최종 나머지만 보정해 중간 자릿수 오류 미수정.

수정

  • cube_divmodint64 경유 자연반올림으로 재구현: cube_to_int(24트릿→long, ±1.4e11 범위)→ q=a/b, r=a-qb, 2|r|>|b|면 q 한 칸 보정(엄격) → int_to_cube. 의미론 |r|≤|b|/2 보존, 13%5=-2 자연반올림 유지.
  • 빌드: cc -O2 -o crownyc_fixed crownyc.c -framework Security -framework CoreFoundation (CLAUDE.md의 cc -O2 -o crownyc crownyc.c는 프레임워크 누락 — Secure Transport SSL 심볼 필요).
  • 안전 스왑: 백업 crownyc.bak.divbug_20260610mv 원자 rename(cp 덮어쓰기는 실행중 바이너리 손상시킴, rc=137 발생 후 mv로 복구).

검증 (회귀 GREEN)

  • 나눗셈 스위트: 100/2=50·256/2=128·1000/2=500·2944/2=1472·13%5=-2·256/4=64 전부 정답.
  • 모듈 회귀: 곡면(S=2350,644,751)·스케치솔버(잔차0)·불리안(4/4) 불변. 챔퍼 1096→1472·회전 1096→1200 정정. 외피솔리드 152→160facet(이전 버그 나눗셈 메시 → 정확 지오메트리).
  • 경계: 437.5→437(스펙 "경계 미축소"대로, 이전 438보다 일관).

관련 파일

  • 수정: /Users/ef/CrownyOS/crownyc/crownyc.c (cube_divmod, ~2696)
  • 백업: /Users/ef/CrownyOS/crownyc/crownyc.bak.divbug_20260610
  • 메모리: feedback_crownyc_divmod_bug(✅수정), feedback_running_binary_atomic_swap

잔여/영향

  • 이 세션 이전 division-사용 모듈의 일부 수치가 버그값이었을 수 있음 → 재감사 권장(대부분 ×10000 큰제수라 안전, 작은수 /2,/소제수만 영향).
  • hanseonc_high(컴파일러)는 별개 파일·미영향.
  • CrownyTVM은 i64 trunc(자연반올림 아님) — 정밀 일치 필요시 주의.