>

이 기능이 있습니다

a = 2
b = 6
c = .4
def f(n):
    if n == 1:
        return a
    if n == 2:
        return b
    else:
        return c*f(n-1) + (1-c)*f(n-2)

2 가지 기본 사례가있는 간단한 재귀 함수입니다. f (1)은 2를 산출하고 f (2)는 6을 산출하지만 양호하지만 f (3)은 3.6이어야하는 경우 3.6000000000000005를 산출합니다. 이 추가 자릿수가 어디에서 왔는지 이해할 수 없습니다. 이 문제의 원인은 무엇입니까?


  • 답변 # 1

    부동 소수점 수학의 마술에 오신 것을 환영합니다. 여기서 좋은 대답을 찾을 수 있습니다. 부동 소수점 수학이 깨졌습니까? 스포일러 : 아니요, 어려워요.

  • 답변 # 2

    컴퓨터에서 부동 소수점 숫자를 사용하면 0.0과 1.0 사이의 무한 실수가 있으므로 숫자를 반올림해야합니다. 따라서 컴퓨터가이를 나타내려면 무한한 메모리가 필요합니다. 물론 그렇게하지 않고 정확하게 표현할 수있는 불연속 부동 소수점 숫자를 사용합니다. 이 유한 부동 소수점 숫자로 계산 결과를 표현할 수없는 경우 결과는 정확하지 않습니다. 이것이 당신에게 일어나는 일입니다.

관련 자료

  • 이전 python - 확률로 빈에 정수를 분배하는 방법
  • 다음 amazon web services - 크롤러가 AWS Glue에서 가져온 테이블을 업데이트 할 수 있습니까?