ex를 계산하기 위해 우리는 앞에서 구현한 for
루프를 다른 for
루프 안에 넣는다.
term = 1.0 total = 0.0 n = 1 while total != total + term: total += term term = 1.0 for i in range(1, n+1): term *= x / i n += 1
while
루프의 실행 횟수는 다음 항과 누적된 합계의 상대적인 값에 달려있다. total
이 더 이상 변하지 않으면 루프를 종료한다. (term > 0
을 종료 조건으로 사용하는 것보다 이 전략이 더 효율적이다. term > 0
조건을 사용하면 total
값을 변경시키지 못하는 사소한 루프를 아주 많이 반복하기 때문이다) 이 코드는 효율적이지만, 내부 for
루프가 외부 for
루프의 이전 반복에서 계산했던 값을 전부 다시 계산하는 부분은 비효율적이다. 다음과 같이 이전 루프 반복 시에 계산한 항을 이용하면 while
루프 하나로 문제를 해결할 수 있다.
term = 1.0 total = 0.0 n = 1 while total != total + term: total += term term *= x/n n += 1