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