컴파일러
컴파일러가 부동소수점 수의 덧셈 (a + b) + c를 엄격한 설정에서는 a + (b + c)로 마음대로 재배열하지 않는 이유로 올바른 것은 무엇인가?
- A반올림 오차 때문에 결합 법칙이 성립하지 않아 결과가 달라질 수 있기 때문
- B재배열하면 덧셈 횟수가 늘어나 버리기 때문
- C부동소수점 수의 덧셈은 하드웨어가 순서를 자동으로 정하기 때문
정답과 해설 보기
정답: A. 반올림 오차 때문에 결합 법칙이 성립하지 않아 결과가 달라질 수 있기 때문
부동소수점 수의 계산에서는 덧셈을 할 때마다 결과가 표현 가능한 자릿수로 반올림되므로 계산 순서를 바꾸면 결과가 미세하게 달라질 수 있습니다. 예를 들어 매우 큰 수와 작은 수를 먼저 더하면 작은 수가 반올림으로 사라지지만, 작은 수끼리 먼저 더하면 남는 경우가 있습니다. 그래서 엄격한 설정의 컴파일러는 순서를 유지합니다. 결과의 차이를 허용하는 설정(고속 수학 설정 등)을 선택하면 벡터화를 위해 재배열하기도 합니다. 덧셈 횟수는 달라지지 않습니다.
- A. 올바릅니다. 반올림 때문에 결합 법칙이 성립하지 않아 결과가 달라질 수 있습니다.
- B. 재배열해도 덧셈 횟수는 같습니다.
- C. 계산 순서는 명령의 나열로 정해지며 하드웨어가 정하는 것이 아닙니다.