double a = 3.0;
float b = 3.0; 은 엄연히 다름 3.0 의 표현식은 double 형3.0을 말하는거고
3.0f는 3.0소수를 float으로 하겠다는거. 컴퓨터에서 short 로 계산해도 int 로 cpu레지스터에서 치환되서 계산되듯
float도 double로 치환되서 계산되는게 아닐까싶어서 지난번에 ㅅㅅㅅ한테 물어봤는데 아직답이없음
double a = 3.0;
float b = 3.0; 은 엄연히 다름 3.0 의 표현식은 double 형3.0을 말하는거고
3.0f는 3.0소수를 float으로 하겠다는거. 컴퓨터에서 short 로 계산해도 int 로 cpu레지스터에서 치환되서 계산되듯
float도 double로 치환되서 계산되는게 아닐까싶어서 지난번에 ㅅㅅㅅ한테 물어봤는데 아직답이없음
부동소수점 레지스터 보면 4바이트 레지스터, 8바이트 레지스터 이렇게 따로 있는게 아니라 내부적으로 모든 부동소수점 실수는 80비트 레지스터에 담겨서 처리됨. 그래서 변수에 float, double을 쓰는 건 부동소수점 처리 결과 80비트 값을 4바이트나 8바이트의 정밀도로 제한해서 메모리에 저장하는 의미임. 그리고 함수 인자 전달 시에는
부동 소수점 레지스터를 거쳐서 전달되기 때문에 float나 double이나 내부적으로는 구분이 없음.
아 왜이레 덧글만 등록하려고 하면
올바른단어가 아니라면서 안되네 졸빡;;
시발 은되는데 왜 질문글은 답글이안되는거냐
그럼 float + double 같은경우 어떻게되냐? double이 float으로 치환되서 계산되는데 결국 부동소수점 레지스터로 내려가면 똑같다며??
double + float하면 80bit+80bit 를 레지스터로 계산한 뒤 80비트 값을 double로 다운스케일하겠지.
float과 double 간 연산이니깐 큰 자료형인 double에 맞추기 위해서.
야 내가잘못알고있는거야? int + long long int 더하면 int 로 다운케스팅되서 나오는거아님? float + double 하면 float으로 다운케스팅되는거아님? 만약 이게 80비트 레지스터로 계산한다고하면 값을 float으로 다운케스팅 할 필요가 있어?
C에서 연산은 기본이 큰 자료형에 맞추는 거야. 이상하게 알고 있나 보네.
가령 1 + 2L => int + long => 3L이 된다.
이런 내가 거꾸로알고있는듯 다시공부해야겠음
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.