일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 데이터베이스
- 자바
- pandas
- 자바 실습
- 정수와유리수
- 데이터시각화
- 언리얼학습
- JSP/Servlet
- 딥러닝
- 정보처리기사필기
- C++
- 데이터입출력구현
- 요구사항확인
- 코딩테스트
- numpy/pandas
- 파이썬
- html/css
- 중학수학
- 텍스트마이닝
- 언리얼프로젝트
- SQL
- 디버깅
- 파이썬라이브러리
- 머신러닝
- 운영체제
- 데이터분석
- 혼공머신
- 중학1-1
- 컴퓨터구조
- 정보처리기사실기
- Today
- Total
클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지
숫자와 숫자 다루기 1 - 최대공배수와 최소공배수 모듈 및 소수점 자릿수 표현하기 본문
파이썬은 수치 연산을 위한 모듈을 많이 지원하여 데이터 과학이나 인공지능에 관련된 프로그램을 많이 사용한다. 이번 단원에서는 수학과 관련된 모듈을 살펴볼 것이다.
과자를 똑같이 나누어 담으려면? - math.gcd
math.gcd() 함수를 이용하면 최대공약수를 쉽게 구할 수 있다.
어린이집에서 사탕 60개, 초콜릿 100개, 젤리 80개를 준비했다. 똑같이 나누어 봉지에 담는다고 하면 최대 몇 봉지까지 만들 수 있을까? 단, 사탕, 초콜릿, 젤리는 남기지 않고 모두 담도록 한다.
이 문제는 60, 100, 80의 최대공약수를 구하면 바로 해결된다.
전체 개수를 20으로 나누어도 답을 구할 수 있다.
버스가 동시에 도착할 시각을 알려면? - math.lcm
math.lcm()은 최소공배수를구하는 함수이다.
어느 버스 정류장에 시내버스는 15분마다 도착하고 마을버스는 25분마다 도착한다고 한다. 오후 1시에 두 버스가 동시에 도착했다고 할 때 두 버스가 동사에 도착할 다음 시각을 알려면 어떻게 해야 할까?
이 문제는 15와25의 공통 배수 중 가장 작은 수, 최소공배수를 구하면 된다.
따라서 두 버스가 동시에 도착할 다음 시각은 75분 후인 오후 2시 15분이다.
소수점을 정확하게 계산하려면? - decimal.Decimal
decimal.Decimal은 숫자를 10진수로 처리하여 정확한 소수점 자릿수를 표현할 때 사용하는 모듈이다.
다음은 파이썬에서 볼 수 있는 이상한 연산 결과의 예이다.
이렇게 되는 이유는 이진수 기반의 파이썬 float 연산은 때에 따라 미세한 오차가 발생할 수 있기 때문이다.
이러한 연산 오류 없이 정확하게 계산하려면 어떻게 해야 할까?
같은지 비교하는 ==연산자 대신 두 값이 가까운지를 확인하는 math.isclose() 함수를 사용하는 방법이 있다.
하지만 이 방법으로는 완전히 해결될 수 없다. 십진수 연산을 사용하는 decimal.Decimal을 사용하여 이 문제를 해결해 볼 것이다. 이때 인수는 '0.1'처럼 문자열이어야 한다.
Decimal 자료형은 다시 float 자료형으로 형변환할 수 있다.
Decimal 사용시 주의할 점
다음처럼 Decimal의 입력으로 문자열 '1.1' 대신 실수형 1.1을 입력하면 오류가 발생한다. Decimal은 정수 연산은 가능하지만 실수 연산은 불가능하기 때문이다.
학습을 마치고
이렇게 수학 모듈에 대해 학습해 보았다. 최대공약수와 최소공배수를 구하는 것은 지난번 책에서 모두 학습했던 내용이라 별로 어렵지 않았다.
이제 나머지 수학 함수를 살펴보려고 한다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
함수형 프로그래밍 다루기 1 - 순서대로 배정하기 및 키 값으로 데이터 묶기 (1) | 2024.10.06 |
---|---|
숫자와 숫자 다루기 2 - 분수 계산하기 및 무작위 난수 추출, 평균과 중앙값 구하기 (0) | 2024.10.06 |
다양한 데이터 다루기 4 - 숫자에 이름 붙여서 사용하기 및 위상정렬로 과목의 순서 정하기 (1) | 2024.10.06 |
다양한 데이터 다루기 3 - 딕셔너리 초기화 및 데이터 출력에 대하여 (0) | 2024.10.05 |
다양한 데이터 다루기 2 - 자료형 넣고 빼기 및 이름 붙이기, 사용한 단어의 개수 구하기 (0) | 2024.10.05 |