부동 소수점 표현 탐구
이 단계에서는 Python 에서 부동 소수점 숫자가 어떻게 표현되는지, 그리고 이 표현이 수치 비교에 미칠 수 있는 잠재적 영향에 대해 탐구합니다. 부동 소수점 숫자는 컴퓨터에서 실수 (소수점이 있는 숫자) 를 나타내는 데 사용됩니다. 그러나 메모리에 저장되는 방식 때문에 실제 실수의 근사치인 경우가 많습니다. 이로 인해 비교를 수행할 때 예상치 못한 결과가 발생할 수 있습니다.
VS Code 편집기를 사용하여 ~/project 디렉토리에 float_representation.py라는 Python 파일을 생성하는 것으로 시작해 보겠습니다.
## Create a floating-point number
x = 0.1 + 0.2
## Print the value of x
print(x)
파일을 저장한 다음 터미널에서 다음 명령을 사용하여 실행합니다.
python float_representation.py
출력이 0.3일 것으로 예상할 수 있지만, 다음과 유사한 내용을 보게 될 것입니다.
0.30000000000000004
이는 0.1과 0.2가 부동 소수점 숫자로 정확하게 표현될 수 없기 때문입니다. 덧셈의 결과는 0.3에 매우 가깝지만 정확히 같지는 않은 숫자입니다.
이제 이 부정확성이 비교에 어떤 영향을 미칠 수 있는지 살펴보겠습니다. float_representation.py 파일에 다음 코드를 추가합니다.
## Create a floating-point number
x = 0.1 + 0.2
## Check if x is equal to 0.3
if x == 0.3:
print("x is equal to 0.3")
else:
print("x is not equal to 0.3")
파일을 저장하고 다시 실행합니다.
python float_representation.py
다음과 같은 출력을 보게 될 것입니다.
x is not equal to 0.3
이는 부동 소수점 표현 문제로 인해 x가 정확히 0.3과 같지 않기 때문입니다.
부동 소수점 숫자를 정확하게 비교하려면 허용 오차 값을 사용해야 합니다. 정확한 동일성을 확인하는 대신, 두 숫자 간의 절대 차이가 작은 허용 오차 값보다 작은지 확인합니다.
float_representation.py 파일을 수정하여 허용 오차를 포함합니다.
## Create a floating-point number
x = 0.1 + 0.2
## Define a tolerance value
tolerance = 1e-9 ## A small value like 0.000000001
## Check if x is approximately equal to 0.3
if abs(x - 0.3) < tolerance:
print("x is approximately equal to 0.3")
else:
print("x is not approximately equal to 0.3")
파일을 저장하고 다시 한 번 실행합니다.
python float_representation.py
이제 다음과 같은 출력을 보게 될 것입니다.
x is approximately equal to 0.3
허용 오차를 사용하면 표현의 내재적인 부정확성에도 불구하고 부동 소수점 숫자를 정확하게 비교할 수 있습니다. 이는 Python 및 기타 프로그래밍 언어에서 부동 소수점 숫자로 작업할 때 이해해야 할 중요한 개념입니다.