더북(TheBook)

이러한 연산자들을 사용해 첫 번째 (완성된) 숫자 프로그램을 작성해보자.

#include <iostream>

int main()
{
    const float r1 = 3.5, r2 = 7.3, pi = 3.14159;
    float area1 = pi * r1 * r1;
    std::cout << "A circle of radius " << r1 << " has area "
              << area1 << "." << std::endl;
    std::cout << " The average of " << r1 << " and " << r2 << " is "
              << (r1 + r2) / 2 << "." << std::endl;
}

이항 연산의 두 인수가 서로 다른 타입을 가질 때 하나의 인수 또는 두 인수 모두 C.3절에 있는 규칙에 따라 일반적인 타입으로 자동(강제) 변환된다.

변환은 정밀도의 손실을 초래할 수 있다. 부동소수점 수를 정수보다 우선시한다. 따라서 64비트 long 타입에서 32비트 float로의 변환은 명백하게 정확도 손실을 초래한다. 심지어 32비트 int더라도 32비트 float로 정확하게 표현할 수 없다. 왜냐하면 int의 일부 비트를 지수 비트로 사용해야 하기 때문이다. 또한, 저장할 변수는 정확한 결과를 저장할 수 있지만, 계산 중간에 이미 정확도가 손실된 경우도 있다. 이 변환 동작을 설명하기 위해 다음 예를 살펴보도록 하자.

long l = 123456789012;
long l2 = l + 1.0f - 1.0;   // 부정확하다.
long l3 = l + (1.0f - 1.0); // 정확하다.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.