aheui.github.io
aheui.github.io copied to clipboard
[제안] 나눗셈의 소수점 처리
정수 연산에서 소수 이야기는 보통 잘 안하는거 같은데,
나눗셈과 나머지 연산에서 그 몫이 나누어 떨어지지 않는 경우, 나머지는 항상 나누는 값보다 작은 양수이다.
와 같이 표현하는건 어떨까요
반영해 봤습니다.
혹시 ㄹ도 좀더 명확하게 써 주실 수 있을까요?
단 몫이 0보다 작고 나머지가 0이 아닌 경우 몫에다 1을 더한 값을 집어 넣습니다.
이 표현은 몫을 재정의하는 표현인데, 기존에 다른 정의가 있어야 쓸 수 있는 표현이라고 생각됩니다.
나눗셈 연산을 피제수 = 제수 * 몫 + 나머지 로 정의하면 나머지를 엄밀히 정의하는 것으로 몫은 자연스럽게 정해질 것 같습니다.
단 몫이 0보다 작고 나머지가 0이 아닌 경우 몫에다 1을 더한 값을 집어 넣습니다.
해당 부분은 jsaheui가 parseInt(b/a)로 구현되어서, 나눈 값을 십진수 문자열로 변환할 경우 소수점 앞부분에 해당하는 정수만 취하는 방식으로 구현되어 있어 그 점을 고려하여 추가한 표현입니다. 이러는 경우 jsaheui에서 사발바반타나는 -3이 아니라 -2가 됩니다. 반대로 피제수 = 제수 * 몫 + 나머지에서 제수 > 나머지 >= 0로 정의하고 몫은 정수라고 정의하면 사발바반타나는 -3이 됩니다.
우선 사발바반타나가 -3이 되도록 해당 문구는 제거해보겠습니다.
그렇게 정의하려면 몫은 항상 0에서 가까운 쪽을 취한다거나 하는 다른 정의 방법을 쓸 수 있을거같아요. 지금까지 구현체에 의존해 왔다면 차라리 명시하지 않는 것은 어떨까요?
@youknowone 저는 5/-2가 -3이 돼야 하는지 -2가 돼야 하는지 명시하는 편이 음수에 대한 나눗셈의 값을 보장할 수 있어서 좋다고 생각합니다.
@puzzlet 어느 부분에서 덜 명확하다 생각하시나요?
저는 처음에 댓글 달 때는 jsaheui에서 그런 구현이 되어 있는지 몰랐었는데, 5/-2가 -3일수도, -2일수도 있는 게 현재의 표준이라면, 그렇지 않다면 지금 그 중 하나로 고정시키는건 스펙 문서 수정이 아닌 표준 변경이라고 생각해요. 음수의 나눗셈과 나머지를 정의하는 방법은 통용되는 것만 여러가지이고 ("나눗셈"이라고 표현했을 때 다른 구현이 나올 수 있는 이유) jsaheui 구현이든 변경된 설명이든 모두 널리 통용되는 정의 중 하나라서 어느 한 쪽을 "당연한" 상태로 보고 변경하는건 원래 표준을 지키던 구현체를 덜 존중하는 결정인듯 합니다.
하지만 역시 스펙 결정은 최종적으로 @puzzlet 님 마음에 드는걸로 :)
지금은 ㄴ도 ㄹ도 단순히 '나눈 값'과 '나머지'이라고만 되어 있는데, 음수의 나눗셈의 정의가 모호하기 때문에 드렸던 말씀입니다.
그리고 굳이 jsaheui에 맞춰서 표준을 정할 필요는 없다고 생각합니다. 명백히 jsaheui 구현이 틀렸던 적도 있었던 것 같고요.