파이썬 math 모듈 질문

조회수 560회
import math as m
#1번, 결과 값 : 1.0
print(m.sin(m.pi/2))
#2번 , 결과 값 -2. 4492935982947064e-16
print(m.tan(m.pi*2))

1번 처럼 하면 sin π/2 의 정확한 값이 나옵니다.

근데 왜 2번처럼 할 때는 tan 0의 값이 아니라 근사값이 나오는 것인지 궁금합니다.

답변 감사합니다. 좋은 하루 되세요!

1 답변

    1. 단순한 답변 :
      • 컴퓨터에서는 (사실 10진수 소수 표현으로도) pi 의 정확한 표현이 불가능합니다.
      • 그래서 tan(pi) 의 정확한 값도 구할 수 없습니다. 근사값일 뿐입니다.
      • 하지만, 구해진 값은 -0.00000000000000024492935982947064 로 원하는 값이 0과 매우 가까운 값입니다.
    2. 그렇다면, sin(pi/2) 는 왜 정확하게 구한걸까?
      • sin(pi/2) 도 어느정도의 오차를 가지고 구하게 될 것입니다.
      • 이 때의 오차를 d(sin(x)) 라고 하면, 그 식은 d(sin(x)) = sin'(x) dx ( sin'(x)는 사인함수의 미분함수, dx 는 계산지점의 x의 오차) 가 되고, 결국 d(sin(x)) = cos(x) dx 가 됩니다.
      • 그리고, 값을 구하는 지점인 pi/2에서의 코사인값은 cos(pi/2) = 0 입니다. 따라서, dx 가 어느정도 있더라도, sin(pi/2) 값의 오차는 최소화되어서, 정확한 값이 나온 것으로 보입니다.

    • 추가질문: 왜 미분을 사용하나?

    y = sin(x) 라고 했을 때, 우리가 알고 싶은 것은 함수값의 오차인 Δy 입니다.

    Δy 를 x 의 오차값인 Δx 와의 관계를 표현해보자면,

    Δy/Δx 는 기울기이고, y' 이니까 Δy/Δx = (sin(x))' = cos(x)

    식을 정리하면,

    Δy = cos(x) Δx

    • 아하 감사합니다!! 근데 혹시 오차 값을 구할 때 미분을 쓰는 이유를 여쭤보아도 괜찮을까요? jeongwonbahk 2022.6.9 20:50

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)