← 목록
기타 2026-07-10 5KB 읽기 5분

근본A — 정수 누산 + 균형3진 자연반올림 나눗셈 문제 해소 (2026-07-10)

개요

재측정(crownyc/docs/한선씨-P2보완-20260710/재측정_P2_4도메인.md)이 지목한 "정수 누산 + 균형3진 자연반올림 나눗셈" 계열 잔여 버그(선형회귀 int-array·통계분석 정수·RK4 h/2000 스케일핵·모듈로 관용구)를 해소. 헌법 균형3진 자연반올림 /,%(13%5=-2)는 절대 불변 — 대신 절단(toward-zero) 전용 신규 opcode를 VM에 추가하고, 기존 라이브러리 중 진짜로 그 opcode가 필요한 지점만 재배선했다.

무엇을 했는지

  1. VM 신규 opcode: TRUNC_DIV(738, 절단나눗셈)는 이미 2026-06-17에 추가되어 있었음(0방향
절단). TRUNC_MOD(752, 절단나머지)가 없었던 것을 이번에 신규 추가(C % 정렬, 부호= 피제수). crownyc.c(opcode_name_kr/opcode_name/asm_lookup) + hanseonc_high.c(builtin 테이블) + hanseonc_rpn.c(RPN 키워드) 3곳 바인딩.
  1. 재배선 — 진짜 필요한 곳만, 절단 vs float 승격을 엄격히 구분:
- libs/수학.한선실수합_더해() 최초항을 값*1.0으로 float 강제 승격 → 선형회귀 int-array 입력(X=[1..5] 등)도 이제 정확한 계수 산출(Python 기준 완전 일치). (주의: 이건 절단이 아니라 float 승격 — 나눗셈 규칙을 바꿔서는 애초에 못 고치는 정밀 손실이라 원칙적으로 구분했다.) - libs/통계분석.한선카이제곱()(항별 정수나눗셈 정밀손실, 4→3.33333 정정)과 사분위수()(보간 위치 소수부 소실, 3→2.75 정정) — 둘 다 float 승격으로 정정. - RK4(libs/미분방정식.한선): 가설을 직접 실험으로 반증 — 절단으로 바꿔도 원본과 바이트 단위로 완전 동일한 결과(스케일 상수가 h 대비 지나치게 커 자연반올림/절단 양쪽 모두 몫이 0으로 붕괴). 의도적으로 미수정 — 근거 없는 "재배선 완료" 주장을 피함. 실제로는 float 전면 재작성이 필요한 별개 과제로 확인.
  1. 신규 conformance 테스트 tests/conformance/20_절단나머지.한선(10 EXPECT, 항등식
a==절단나눗셈(a,b)*b+절단나머지(a,b) 및 모듈로 관용구 i-절단나눗셈(i,n)*n 검증 포함).
  1. 착수 전 백업(crownyc.c.bak-P3A 등) → 임시빌드 → 광범위 검증 전부 통과 → mv 교체(정본
규칙 준수) → pkg/ 동기(라이브러리는 하드링크로 자동 동기 확인됨, 소스 3파일은 cp).

검증 결과 (상세는 crownyc/docs/한선씨-P3보완-20260710/근본A_검증.md)

  • 헌법 보존: 13%5=-2, 7*8=56, 자연반올림 10/3=3 불변 재확인.
  • tests/run_all.sh: 99/107 (기준선과 완전 동일, 실패 8건 동일).
  • pkg make test: 11/13 (기준선과 완전 동일, 실패 2건 동일, 무관 이슈).
  • conformance 스위트: 19/19 → 20/20(신규 1건 추가, 전부 PASS).
  • 퍼징 200케이스 2회: 1.5%(3/200) / 3.0%(6/200) — 둘 다 ≤3.5%, 크래시 opcode 전부
738/739/752와 무관 확인. 752 경계값(0/음수/±1e9/INT_MAX 등) 직접 퍼징도 크래시 없음.
  • float 무손상: 실수제곱근(2)=1.41421, 사인(0.5)=479 재확인.
  • 재배선 표준값 대조: 선형회귀 int-array(기울기=1.5,절편=1.7 — Python 완전일치), float
회귀방지(0.6/2.2/5.8 동일), 카이제곱(3.33333 정정), 사분위수(Q1=2.75/Q3=6.25 정정), 공분산/상관계수/분산/표본평균/모표준편차(전부 기존값과 동일, 무회귀 확인).

하나도 악화되지 않아 mv 교체 채택.

관련 파일

  • /Users/ef/CrownyOS/crownyc/crownyc.c (opcode 752 TRUNC_MOD 추가, 정본)
  • /Users/ef/CrownyOS/crownyc/hanseonc_high.c (절단나머지 builtin 바인딩)
  • /Users/ef/CrownyOS/crownyc/hanseonc_rpn.c (절단나머지 RPN 키워드)
  • /Users/ef/CrownyOS/crownyc/libs/수학.한선 (실수합_더해 float 강제 승격)
  • /Users/ef/CrownyOS/crownyc/libs/통계분석.한선 (카이제곱/사분위수 float 승격)
  • /Users/ef/CrownyOS/crownyc/tests/conformance/20_절단나머지.한선 (신규 회귀 테스트)
  • /Users/ef/CrownyOS/crownyc/{crownyc.c,hanseonc_high.c,hanseonc_rpn.c}.bak-P3A (백업)
  • /Users/ef/CrownyOS/docs/한선씨-P3보완-20260710/근본A_검증.md (상세 검증 로그)

잔여 이슈

  • RK4(libs/미분방정식.한선): 스케일 상수(1000/2000/6000) 설계 결함으로 절단/자연반올림
무관하게 전 스텝 붕괴 확인 — float 전면 재작성 필요(P4 후보, 별도 세션 이관 권장).
  • FFT/bignum: 여전히 none, 근본A 범위 밖(별개 과제).
  • 크라우니코드 학습: opcode_trunc_mod_752, 실수합_더해_float_강제승격 패턴 add 완료.