관리 메뉴

클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

숫자와 숫자 다루기 1 - 최대공배수와 최소공배수 모듈 및 소수점 자릿수 표현하기 본문

프로그래밍 언어/파이썬

숫자와 숫자 다루기 1 - 최대공배수와 최소공배수 모듈 및 소수점 자릿수 표현하기

huenuri 2024. 10. 6. 12:23

파이썬은 수치 연산을 위한 모듈을 많이 지원하여 데이터 과학이나 인공지능에 관련된 프로그램을 많이 사용한다. 이번 단원에서는 수학과 관련된 모듈을 살펴볼 것이다.


 

 

 

과자를 똑같이 나누어 담으려면? - math.gcd

math.gcd() 함수를 이용하면 최대공약수를 쉽게 구할 수 있다. 

 

어린이집에서 사탕 60개, 초콜릿 100개, 젤리 80개를 준비했다. 똑같이 나누어 봉지에 담는다고 하면 최대 몇 봉지까지 만들 수 있을까? 단, 사탕, 초콜릿, 젤리는 남기지 않고 모두 담도록 한다.

이 문제는 60, 100, 80의 최대공약수를 구하면 바로 해결된다.

 

전체 개수를 20으로 나누어도 답을 구할 수 있다.

 

 

math - 수학 함수

 

math — Mathematical functions

This module provides access to the mathematical functions defined by the C standard. These functions cannot be used with complex numbers; use the functions of the same name from the cmath module if...

docs.python.org


 

 

 

 

 

버스가 동시에 도착할 시각을 알려면? - 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은 정수 연산은 가능하지만 실수 연산은 불가능하기 때문이다.

 

부동 소주점 산술 : 문제점 및 한계

 

15. Floating-Point Arithmetic: Issues and Limitations

Floating-point numbers are represented in computer hardware as base 2 (binary) fractions. For example, the decimal fraction 0.625 has value 6/10 + 2/100 + 5/1000, and in the same way the binary fra...

docs.python.org

 

 

숫자형 더 알아보기

 

02-1 숫자형

숫자형(Number)이란 숫자 형태로 이루어진 자료형으로, 우리가 이미 잘 알고 있는 것이다. 우리가 흔히 사용하는 숫자들을 생각해 보자. 123과 같은 정수, 12.34와 같은…

wikidocs.net

 


 

 

학습을 마치고 

이렇게 수학 모듈에 대해 학습해 보았다. 최대공약수와 최소공배수를 구하는 것은 지난번 책에서 모두 학습했던 내용이라 별로 어렵지 않았다.

이제 나머지 수학 함수를 살펴보려고 한다.