더북(TheBook)

이렇게 하면 a*x라는 곱셈 연산, 종료 조건의 평가, x의 업데이트 연산을 서로 분리할 수 있다. 그러면 while의 조건이 할 일은 없어진다. 이를 for문으로도 작성할 수 있는데, C 프로그래머들은 관용적으로 다음과 같이 쓴다.

for (;;) {
  double prod = a*x;
  if (fabs(1.0 - prod) < eps) { // 기준에 충분히 근접하면 멈춘다.
    break;
  }
  x *= (2.0 - prod); // 헤론의 근사 공식
}

여기서 for(;;)while(true)와 같다. for의 제어 표현식(;;에서 가운데 부분)을 생략하면 ‘항상 참(true)’으로 처리되는데, 특별한 이유나 목적이 있어서가 아니라 단지 예전부터 그렇게 처리해서 관례로 자리 잡았기 때문이다.

continue문은 break에 비해 사용 빈도가 낮다. break와 마찬가지로 의존 블록에서 이 문장의 뒤에 나온 부분은 실행되지 않는다. 따라서 블록에서 continue 뒤에 나온 부분은 현재 반복 회차에서 실행하지 않고 다음 회차로 넘어간다. 이후 조건을 검사한 다음 참이 나오면 의존 블록의 처음부터 실행을 이어간다.

for (size_t i = 0; i < max_iterations; ++i) {
  if (x > 1.0) { // 올바른 방향인지 확인한다.
    x = 1.0/x;
    continue;
  }
  double prod = a*x;
  if (fabs(1.0 - prod) < eps) {  // 기준에 충분히 근접하면 멈춘다.
    break;
  }
  x *= (2.0 - prod);             // 헤론의 근사 공식
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.