CS/자료구조 & 알고리즘
자료구조 & 알고리즘 #2 (fraction, decimal)
Moonsu99
2023. 11. 21. 18:48
Fraction 모듈
- 분수 표현을 가능하게 한다.
- 예를 들어, Fraction(3, 4)는 분수 ¾를 나타냄.
- 분수 사이의 사칙연산, 간단화, 비교 등이 가능.
예시1
from fractions import Fraction
# 분수 생성
f1 = Fraction(3, 4) # 3/4
f2 = Fraction(1, 2) # 1/2
# 분수의 사칙연산
result_add = f1 + f2 # 덧셈
result_sub = f1 - f2 # 뺄셈
result_mul = f1 * f2 # 곱셈
result_div = f1 / f2 # 나눗셈
print(f"덧셈: {result_add}")
print(f"뺄셈: {result_sub}")
print(f"곱셈: {result_mul}")
print(f"나눗셈: {result_div}")
예시2
from fractions import Fraction
def rounding_floats(number1, places):
# 주어진 소수점 이하 자릿수(places)까지 number1을 반올림한다.
return round(number1, places)
def float_to_fractions(number):
# 부동 소수점 수를 Fraction 객체로 변환한다.
return Fraction(*number.as_integer_ratio())
def get_denominator(number1, number2):
"""분모를 반환한다."""
# 두 숫자를 이용하여 Fraction 객체를 생성하고, 그 분모를 반환한다.
a = Fraction(number1, number2)
return a.denominator
def get_numerator(number1, number2):
"""분자를 반환한다."""
# 두 숫자를 이용하여 Fraction 객체를 생성하고, 그 분자를 반환한다.
a = Fraction(number1, number2)
return a.numerator
def test_testing_floats():
# 여러 테스트 케이스를 정의하고, assert문을 사용하여 예상 결과를 확인한다.
number1 = 1.25
number2 = 1
number3 = -1
number4 = 5/4
number6 = 6
assert(rounding_floats(number1, number2) == 1.2)
assert(rounding_floats(number1 * 10, number3) == 10)
assert(float_to_fractions(number1) == number4)
assert(get_denominator(number2, number6) == number6)
assert(get_numerator(number2, number6) == number2)
print("테스트 통과!")
if __name__ == "__main__":
test_testing_floats()
- rounding_floats: 소수점 이하 자릿수를 지정하여 숫자를 반올림.
- float_to_fractions: 부동 소수점 수를 분수 형태로 변환. as_integer_ratio() 메소드는 부동 소수점 수를 분수로 표현할 때 분자와 분모를 반환.
- get_denominator와 get_numerator: 각각 분모와 분자를 반환. 이들은 Fraction 객체를 생성하여 해당 값을 추출.
- test_testing_floats: 여러 테스트 케이스를 실행하여 함수들이 올바르게 동작하는지 확인. assert 문은 조건이 True일 경우에만 통과하며, 그렇지 않을 경우 오류를 발생시킴.
- if __name__ == "__main__":: 이 스크립트가 직접 실행될 때만 test_testing_floats() 함수를 호출.
Decimal 모듈
- decimal 모듈은 부동 소수점 연산의 정밀도를 높여줌.
- 예를 들어, Decimal('0.1')은 0.1을 더 정확하게 표현.
- 이 모듈은 금융 계산과 같이 정밀도가 매우 중요한 상황에 적합.
- 기본 부동 소수점 연산보다 더 정밀한 계산과 제어가 가능.
예시1
from decimal import Decimal
# Decimal 객체 생성
d1 = Decimal('0.1')
d2 = Decimal('0.2')
# 부동 소수점 연산
result_add = d1 + d2
result_sub = d1 - d2
result_mul = d1 * d2
result_div = d1 / d2
print(f"덧셈: {result_add}")
print(f"뺄셈: {result_sub}")
print(f"곱셈: {result_mul}")
print(f"나눗셈: {result_div}")
결론?
두 모듈은 서로 다른 유형의 계산에서 정밀도와 정확성을 향상시키기 위해 사용됨.
예를 들어, fraction 모듈은 분수 형태의 데이터를 정확하게 다룰 때 사용되며,
decimal 모듈은 소수점 아래 긴 숫자를 정확하게 다루는 데 사용됨.
참고서적
https://www.hanbit.co.kr/store/books/look.php?p_code=B8465804191
파이썬 자료구조와 알고리즘 : 기초 튼튼, 핵심 쏙쏙, 실력 쑥쑥
이 책은 파이썬을 십분 활용해 필수적인 자료구조와 알고리즘을 두루 살펴본다. 스택, 큐, 연결 리스트 등 추상 데이터 타입과 정렬, 검색, 동적 계획법, 그래프, 트리 등 개발자가 꼭 알아야 할
www.hanbit.co.kr