본문 바로가기

C++ Programming/Exceptional C++ style

double 과 float

1) doubler과 float의 차이는 무엇인가?

부동소수점 형식에는 세 가지가 있다. float,double,long double이다.
float 형식의 값들의 집합은 double형식의 값들의 집합의 부분 집합니다.
double형식은 적어도 float형식만큼의 정밀도를 제공하며, long double 형식은 적어도 double형식만큼의 정밀도를 제공한다.

2) 다음 프로그램을 실행하는데 1초가 걸린다고 하자

int main(){
   double x = 1e8;
    while(x > 0){
        --x;
     }
 }
  만일 double에서 float로 바꾼다면 실행에 어느정도의 시간이 걸릴까? 왜 그럴까?
  float가 0에서 1e8사이의 모든 정수 값들을 정확히 표현할 수 있으냐에 따라, 1초정도 걸릴수도 있고, 무한히 끝나지 않을 수도 있다.
몇몇 유명 플랫폼과 컴파일러들에서 double은 0에서 1e8까지의 모든 정수들을 정확히 표현할 수 있지만 float는 그렇지 않다. x를 계속 감소시키다가, float으로는 표현할 수 없는, 그리고 N-1==N인 어떠한 값 N에 도달하게 된다.
그러면 루프는 컴퓨터가 꺼지거나 자원 고갈로 운영체제가 죽을때까지 계속 돌아간다.