2014-10-08 3 views
0

할당의 일부로 다음과 같은 표현식을 사용하고 있습니다. (double) (float) x == (double) x 은 오버레이 1을 반환합니다. 부호있는 정수)캐스팅과 부동 결과를 두 배로 사인 한 다음 double float으로 변환합니다.

INT_MAX를 제외한 모든 값에 대해 작동합니다. 왜 그런지 궁금 해서요? 만약 내가 값을 인쇄하면, 둘 다 INT_MAX에 대해서도 같은 값을 보여줍니다.

x = INT_MAX ; 
printf("Signed X: %d\n",x); 
float fx1 = (float)x; 
double dx1 = (double)x; 
double dfx = (double)(float)x; 
printf("(double) x: %g\n",dx1); 
printf("(float) x: %f \n",fx1); 
printf("(double)(float)x: %g\n",dfx); 
if((double) (float) x == (double) x){ 
    printf("RESULT:%d\n", ((double)(float) x == (double) x)); 
} 

EDIT : 전체 프로그램 :

#include<stdio.h> 
#include<stdlib.h> 
#include<limits.h> 

int main(int argc, char *argv[]){ 



//create random values 

    int x = INT_MAX ; 


    printf("Signed X: %d\n",x); 
    float fx1 = (float)x; 
    double dx1 = (double)x; 
    double dfx = (double)(float)x; 
    printf("(double) x: %g\n",dx1); 
    printf("(float) x: %f \n",fx1); 
    printf("(double)(float)x: %g\n",dfx); 
    if((double) (float) x == (double) x){ 
     printf("RESULT:%d\n", ((double)(float) x == (double) x));  
    } 

    return 0; 

} 메인 함수 // 단부

+0

float로 캐스팅 할 때 정밀도를 잃을 가능성이 가장 높습니다. – thumbmunkeys

+0

왜 INT_MAX를 제외한 * 모든 값에 대해 "작동"한다고 생각합니까? 모두 시도한 적이 있습니까? (해야합니다!) –

+0

프로그램의 결과물을 보여주기 위해 질문을 갱신하십시오.'#include '과'main' 함수의 정의를 포함하여 전체 프로그램을 보여주는 것도 좋을 것입니다. 그리고'% f'와'% g'의 혼합 –

답변

0

intfloat 32. float 즉, 그 표현의 비트 대부분 동일한 번호가 가수, 지수 및 부호 비트를 가지고 있으므로 가수는 과 같은 더 큰 값인 int 값에 필요한 31 비트보다 작아야합니다. 따라서 float에 저장할 때 정밀도가 떨어집니다.

관련 문제