수학적으로는 항상

이 성립함을 알고 있다. 이런 수식을 검증하도록 하는 파이썬 코드를 만들어보자
import sys
import stdio
import math
x = int(sys.argv[1])
y = (math.cos(x))**2+(math.sin(x))**2
stdio.writeln(y)
그리고 y를 입력해서 답을 확인해보자

여기에 나오는 것과 같이 어떤 경우에는 1.0으로 잘 변환하다가 어떤 경우에는 0.9999999999999999 처럼 이상한 답을 내놓는다. 이는 부동소수점 오류 때문이다.
부동소수점 오차 때문에 일부 경우에는 0.9999999999999999처럼 1보다 아주 약간 작은 값이 나올 수 있는 것이다.
이런 문제를 해결하기 위해선
1.
y = round((math.cos(x))**2 + (math.sin(x))**2, 10)
2.
import math
if math.isclose(y, 1.0, rel_tol=1e-9):
print("y는 1과 매우 가까운 값입니다.")
이런 식으로 round()함수나 math.isclose()함수를 사용해서 부동소수점 문제를 해결할 수도 있다.
import sys
import math
x = int(sys.argv[1])
y = (math.cos(x))**2 + (math.sin(x))**2
y = round(y, 10) # 소수점 10자리까지 반올림
print(y)
y를 바로 출력하지말고 round(y,10)으로 반올림을 해서 부동소수점 문제를 해결했다.
writeln 함수를 빼기 위해 stdio모듈을 없애고 그냥 print()함수로 출력한다.
참고로 round(y, 10)은 소수점 10자리까지 반올림이라는 것이며 이 의미는 다음과 같다.
숫자 1.2345678912345가 있다고 가정하자.
1.2345678912345
소수점 10번째 자리(2)까지 남기고, 이후 숫자는 버림 또는 반올림됨.
→ 1.2345678912
1.2345678912345
소수점 3번째 자리(4)까지 남기고, 이후 숫자는 반올림되어 5가 됨.
→ 1.235
'컴퓨터이야기 > 파이썬프로그래밍' 카테고리의 다른 글
프롬프트 상에서 파이썬 간단한 코딩 실행하기 (0) | 2025.03.04 |
---|---|
파이썬 float 연산자 기초 연습(파이썬을 이용한 컴퓨터 과학 입문) (1) | 2025.02.17 |
파이썬 모듈에 writeln 함수 추가하기 (1) | 2025.02.16 |
명령 프롬프트로 Git 설치하기 (0) | 2025.02.16 |
python과 python3 명령어 둘 다 사용하기[PykoSpacing] (0) | 2025.02.16 |