디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[📚정보] 파이썬 계산기(13): 뺄셈을 이용한 몫과 나머지

신촌우왕87갤로그로 이동합니다. 2022.07.14 01:36:14
조회 458 추천 1 댓글 37
														

신촌우왕 소개

수학자, 천재작곡가, 요가수행자






계산기를 만들기 위해

필요한 가장 기본적인 지식은

나눗셈의 몫과 나머지에 대한 지식이다.


파이썬 계산기(13):

분수 대신 뺄셈을 이용한 몫과 나머지



b = aq + r

0 ≤ r < |a|



a > 0일 때:


(b/a) - 1 < q ≤ (b/a)

정수 q = floor(b/a)

a < 0일 때:


(b/a) ≤ q < (b/a) + 1

정수 q = ceil(b/a)



위와 같이 몫을 구하기 위해서는 우선 b/a의 값을 계산해야 한다.

문제는 프로그래밍 언어들이 분수 계산을 잘 못한다는 것이다.

z / 1 = z와 같은 뻔한 분수 계산에서도 문제가 발생한다.


다음 두 코드는 같은 결과값이 출력되기를 기대한다.

그러나...

print(math.floor(10000000000000000000000000))
print(math.floor(10000000000000000000000000 / 1))

출력:

10000000000000000000000000

10000000000000000905969664


다른 값이 나왔으므로

문제가 발생했다.






나눗셈의 몫과 나머지를 구하기 위한 다른 대안


따라서 math.floor(b/a) 혹은 math.ceil(b/a)을 이용하여

나눗셈의 몫과 나머지를 구하는 것은 문제가 발생한다.


다른 대안은 덧셈 혹은 뺄셈을 이용하는 것이다.


보통 곱셈은 덧셈과 잘 대등되고

분수셈은 뺄셈과 잘 대응되므로

여기에서는 뺄셈을 이용하여 몫과 나머지를 구하는 대안을 제시한다.

(※ 2씩 더해가면서 넘어설 때까지 덧셈 과정을 진행하는 것도 생각할 수 있다.)



viewimage.php?id=3da4c42eeadc&no=24b0d769e1d32ca73deb8ffa1bd8233cce8add2661534ac7e60c522a7eb81ad27ff21ff9ca41386dff0509ac6a7e7c252a968f245d9ca91e1492ca148484bac748941c



(예1) 6을 2로 나누어 몫과 나머지를 구해보자.

다음과 같이 2를 빼는 과정을 반복한다.

6 - 2 = 4

4 - 2 = 2

2 - 2 = 0

3번의 뺄셈 과정을 거쳐 0이 남았다.

3은 몫이고 0은 나머지이다.


(예2) 7을 2로 나누어 몫과 나머지를 구해보자.

다음과 같이 2를 빼는 과정을 반복한다.

7 - 2 = 5

5 - 2 = 3

3 - 2 = 1

3번의 뺄셈 과정을 거쳐 1이 남았다.

3은 몫이고 1은 나머지이다.


위의 두 경우 모두 한 번 더 빼면 남는 수가 음수가 된다.

나머지는 음수가 될 수 없다.

따라서 뺐을 때 음수가 나오면 그 전 단계까지가 유효한 몫과 나머지를 제공하게 된다.





두 양의 정수 a, b에 대하여

b를 a로 나눈 몫과 나머지를 리턴하는 메소드는 다음과 같다.


b가 a보다 엄청 클 때는 빼는 횟수가 급격하게 늘어나

몫과 나머지를 리턴하는데 곤란해질 수 있으므로

외부에서 사용하도록 허락할 수 없는 메소드라고 할 수 있다.


따라서 외부에서 접근할 수 없도록 메소드명을 두 개의 언더바로 시작하였다.


viewimage.php?id=3da4c42eeadc&no=24b0d769e1d32ca73deb8ffa1bd8233cce8add2661534ac7e60c522a7eb81ad27ff21ff9ca41386dff0509c1067b7c24741b840d6063655d946df5b0feac91c0a1397a40


클래스 내에서

언더바 두 개로 시작하는 메소드는 외부에서 접근할 수 없다.


굳이 접근하고 싶다면

객체변수명과 클래스명을 함께 동원하여 접근할 수 있다.


model = CalcModel()

print(model._CalcModel__qr_positive_integer(27, 4))



출력은 다음과 같다.

(6, 3)


즉 27을 4로 나누면

몫은 6, 나머지는 3이다.


뺄셈법을 이용하여

몫과 나머지를 구하였다.






뺄셈을 이용한 몫과 나머지 구하기 문제점


10을 1로 나누어 몫과 나머지를 구하려면 10회의 뺄셈을 해야 한다.

(마지막 1회 추가 뺄셈은 제외)


100을 1로 나누어 몫과 나머지를 구하려면 100회의 뺄셈을 해야 한다.

1000을 1로 나누어 몫과 나머지를 구하려면 1000회의 뺄셈을 해야 한다.


자리수가 하나 늘어날 때마다 빼는 회수가 10배로 늘어난다.

뺄셈 회수가 기하급수적으로 늘어나고 있음을 알 수 있다.


math.floor(b/a), math.ceil(b/a)의 값에 오류가 있는 문제점 대신에

이제는 구하는 속도에 문제가 생긴 셈이다.


10000000(천만)을 1로 나눌 때 천만번의 뺄셈을 해야 하며

이때 걸리는 시간이 약 1초라면

10억을 1로 나눌 경우 약 100초가 걸리는 셈이고

천억을 1로 나눌 경우에는 약 10000(1만)초가 걸리는 셈이다.


천억을 1로 나눈 나머지를 구하기 위해 2~3일 걸리는 셈이다.


위와 같이

뺄셈법은 정확하지만 시간이 많이 걸린다.


다음 정보에서

이를 극복하기 위한 방법을 제시하기로 한다.







추천 비추천

1

고정닉 1

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
- 설문 영포티룩도 멋지게 소화할 것 같은 40대 스타는? 운영자 25/10/27 - -
- AD 할로윈 슈퍼위크~!! 운영자 25/10/23 - -
1826 🔎질문 파이썬 질문 다시 드려요 (에러 창을 복사했는데 안보이네요. 이상하네요. [6] 궁금이(222.238) 22.07.28 173 0
1823 📚정보 파이썬 계산기(16): 루트k의 계산 신촌우왕87갤로그로 이동합니다. 22.07.28 186 1
1822 🔎질문 selenium element 질문 [2] oo(32.140) 22.07.28 206 1
1820 🔎질문 python pprint 써본사람? ㅇㅇ(182.223) 22.07.27 104 0
1817 🔎질문 파이참으로 크롤링 중인데 일시정지 있음??????????????????? [1] ㅇㅇ(39.118) 22.07.27 145 0
1816 🔎질문 파이참 opencv에서만 자동완성이 다 깨져서 나오는데 [2] ㅇㅇ(218.154) 22.07.27 741 0
1815 일반 와 평일 이 시간대에 [1] ㅁㅁ(223.38) 22.07.26 131 0
1814 🔎질문 이 세마포년이 뭐라는건지 아시는분 있습니노? [7] 키메라(1.212) 22.07.26 135 0
1813 🔎질문 마우스로 그림그리면 뭔가 처리할 수 있는 라이브러리가 있나요? [1] snake(223.62) 22.07.25 181 0
1812 일반 cls랑 time.sleep이 ㄹㅇ 시너지가 좋더라 [2] 하목금지조갤로그로 이동합니다. 22.07.25 144 0
1809 🔎질문 형들 파이썬 입문자 질문드려요 [3] ㅇㅇ(175.112) 22.07.24 223 0
1808 🔎질문 유데미 강의 추천좀 ㅇㅇ(59.2) 22.07.23 333 0
1807 일반 와 시발 크롤링 존나 힘들구나 [4] 치킨이좋아갤로그로 이동합니다. 22.07.23 351 0
1806 일반 뭐만 하면 오류 쳐 뜨네 ㅇㅇ(175.205) 22.07.23 97 0
1805 🔎질문 스레드 이해에 필요한 핵심키워드는 무엇입니노? [2] 키메라(211.36) 22.07.20 158 0
1804 🔎질문 이 쓰래기는 또 뭔데 [3] ㅇㅇ(59.27) 22.07.20 150 0
1803 📚정보 파이썬 계산기(15): 두 정수 나눗셈 일반화 [2] 신촌우왕87갤로그로 이동합니다. 22.07.19 202 1
1802 🔎질문 코린이 PyQt5 질문 [2] 기초(118.37) 22.07.19 169 0
1801 🔎질문 디씨 복붙가능 코드블록 생성기 왜 공지에서 없어졌어 [2] ㅇㅇ(45.14) 22.07.18 126 0
1799 🔎질문 파린이(코린이) 질문 [2] 기초(118.37) 22.07.16 142 0
1798 🔎질문 파이썬 개발도구 IDLE만으로도 다 해결됨? [3] ㅇㅇ(211.216) 22.07.16 173 0
1796 📚정보 파이썬 계산기(14): 뺄셈으로 몫과 나머지 빨리 구하기 [2] 신촌우왕87갤로그로 이동합니다. 22.07.14 228 1
1795 📚정보 자연수 n에 대한 <피타고라스 세 수> [1] 신촌우왕87갤로그로 이동합니다. 22.07.14 235 3
📚정보 파이썬 계산기(13): 뺄셈을 이용한 몫과 나머지 [37] 신촌우왕87갤로그로 이동합니다. 22.07.14 458 1
1792 🔎질문 메일 크롤링 질문 [1] ㅇㅇ(175.198) 22.07.13 191 0
1790 🔎질문 이 코드 idle에서만 돌아가고 파이참에서는 안 돌아가는 이유 좀 [2] ㅇㅇ(59.27) 22.07.13 155 0
1789 📚정보 파이썬 계산기(12): 몫과 나머지 Code 및 문제점 [2] 신촌우왕87갤로그로 이동합니다. 22.07.13 256 1
1788 📚정보 파이썬 계산기(11): 실수의 나눗셈 정리 [1] 신촌우왕87갤로그로 이동합니다. 22.07.12 176 1
1787 🔎질문 아랫글 질문자인데 해결했습니다 근데 [1] ㅇㅇ(59.2) 22.07.11 694 0
1785 🔎질문 파이썬 셀레늄 if 갈림길 질문 [7] ㅇㅇ(59.2) 22.07.10 180 0
1783 일반 파이썬 계산기(10): 후위표기식에서 결과값 얻기 Code [1] 신촌우왕87갤로그로 이동합니다. 22.07.10 105 1
1782 일반 리스트와 행렬 [1] 신촌우왕87갤로그로 이동합니다. 22.07.09 127 0
1781 🔎질문 클래스는 왜 쓰는거야? [7] ㅇㅇ(14.54) 22.07.09 489 0
1780 일반 파이썬 계산기(9): 후위표기식에서 결과값 얻기 [2] 신촌우왕87갤로그로 이동합니다. 22.07.08 160 2
1779 🔎질문 형님들 GIL 질문드립니다. [2] 기초(118.37) 22.07.08 158 0
1778 🔎질문 버튼 클릭 시 주파수 그래프 나오게 하는 방법 [2] 만자몽(106.101) 22.07.07 187 0
1777 🔎질문 파이썬 같이 boolean 자료형이 있는 언어에서는 [8] ㅇㅇ(125.129) 22.07.07 167 0
1776 🔎질문 파이썬 오류 고쳐줄 사람 부탁해요 [4] ㅇㅇ(180.81) 22.07.07 143 0
1775 🔎질문 이미지 향상 머신 러닝 [4] ㅇㅇ(221.153) 22.07.07 142 0
1774 🔎질문 Vs code 넘파이 불러오기 실패 [2] milkiscow(211.182) 22.07.07 161 0
1772 🔎질문 한줄로 입력받은 숫자들을 2개씩 끊어 입력받기 [8] ㅇㅇ(125.129) 22.07.05 174 1
1771 🔎질문 파이썬으로 인벤에서 특정 텍스트 검색하는 거 어케할 수 있어? [7] Sachi갤로그로 이동합니다. 22.07.05 253 0
1769 일반 파이썬 계산기(8): 나머지 연산자 %의 문제점 신촌우왕87갤로그로 이동합니다. 22.07.04 227 1
1768 🔎질문 기초적인 코드 질문 [4] 기초(118.37) 22.07.04 136 0
1767 일반 파이썬 계산기(7): math.floor()의 문제점 [3] 신촌우왕87갤로그로 이동합니다. 22.07.04 186 1
1766 📚정보 오래간만에 들렀습니다 ㅁㅁㅁㅁㅁ(223.38) 22.07.02 571 6
1765 🔎질문 각자 파이썬 버전 뭐로 쓰는지 말좀 해줘 [9] ㅇㅇ(175.206) 22.07.02 2328 1
1764 일반 파이썬 계산기(6): 토큰리스트에서 후위표기식 얻는 코드 신촌우왕87갤로그로 이동합니다. 22.07.01 362 6
1761 일반 개발자 <- 이 단어 존나 이상함 [2] 키메라(1.212) 22.06.28 222 0
1759 🔎질문 파이썬 개초보 오류 질문드립니다. [10] ㅇㅇ(1.177) 22.06.26 216 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2