본문 바로가기
실버를 위한 코딩/파이썬

[파이썬] 부동소수점에 관하여

by forSilver 2024. 5. 29.
반응형

부동소수점에 관하여

부동소수점은 컴퓨터에서 실수를 근사적으로 표현하기 위해 사용되는 방식입니다. 실수는 유한한 비트로 표현되기 때문에 정확한 값을 가지지 못하고 근삿값으로 저장됩니다. 부동소수점 표기는 기본적으로 부호 비트, 지수부, 가수부로 구성됩니다. 이진 부동소수점 표현에서 0.1 같은 값을 정확히 표현할 수 없어 계산 시 오차가 발생할 수 있습니다. 부동소수점의 한계로 인해 정밀도가 요구되는 계산에서는 주의가 필요하며, 적절한 반올림과 포맷팅이 중요합니다.

 

주피터 노트북에서 파이썬에 의한 부동소수점 처리 예제를 가지고 설명합니다.

주피터 노트북의 부동소수점 사례

부동소수점 계산과 반올림

셀 1: format((0.1 + 0.2), '.1f')

format((0.1 + 0.2), '.1f')
  • 설명:
    • 이 코드는 0.1 + 0.2의 결과를 소수점 첫째 자리까지 포맷하여 문자열로 반환합니다.
    • format(value, format_spec) 함수는 주어진 valueformat_spec에 맞춰 포맷팅 하는 함수입니다.
    • '.1f'는 소수점 이하 1자리까지의 부동소수점 형식으로 포맷하라는 의미입니다.
  • 결과:
    • '0.3'
    • 0.1 + 0.2는 부동소수점의 정확도로 인해 0.30000000000000004로 계산되지만, 포맷팅에 의해 소수점 첫째 자리까지 반올림된 0.3이 문자열로 반환됩니다.

셀 2: round(0.1 + 0.2, 1)

round(0.1 + 0.2, 1)
  • 설명:
    • 이 코드는 0.1 + 0.2의 결과를 소수점 첫째 자리까지 반올림합니다.
    • round(number, ndigits) 함수는 주어진 numberndigits 위치까지 반올림합니다.
  • 결과:
    • 0.3
    • 0.1 + 0.2는 부동소수점의 정확도로 인해 0.30000000000000004로 계산되지만, 소수점 첫째 자리까지 반올림된 0.3이 반환됩니다.

셀 3: round(2.675, 2)

round(2.675, 2)
  • 설명:
    • 이 코드는 2.675를 소수점 둘째 자리까지 반올림합니다.
    • round(number, ndigits) 함수는 주어진 numberndigits 위치까지 반올림합니다.
  • 결과:
    • 2.67
    • 이 결과는 부동소수점의 특성 때문에 발생합니다. 2.675는 내부적으로 정확히 표현되지 않으며, 실제로는 2.6749999999999998로 표현됩니다. 따라서 소수점 둘째 자리까지 반올림하면 2.67이 됩니다.

부동소수점 계산과 반올림의 특징

  1. 부동소수점 계산의 한계:
    • 컴퓨터에서 부동소수점을 표현하는 방식 때문에 0.1 + 0.2 같은 계산은 정확히 0.3이 되지 않을 수 있습니다. 이는 이진 부동소수점 표현 방식의 정밀도 한계로 인한 것입니다.
  2. 반올림의 특성:
    • round 함수는 반올림할 자리의 값과 그다음 자릿수를 기준으로 반올림을 수행합니다.
    • 부동소수점의 내부 표현이 정확하지 않기 때문에, 우리가 예상하는 반올림 결과와 다를 수 있습니다.

결론

이 예제들은 파이썬에서 부동소수점 연산의 특성과 format, round 함수를 사용하여 숫자를 원하는 형식으로 표현하고 반올림하는 방법을 보여줍니다. 부동소수점 연산의 한계를 이해하고 적절한 포맷팅과 반올림을 통해 정확한 결과를 얻는 것이 중요합니다.