답변 감사합니다.
하나만 더 여쭙겠습니다.
기본이 double형이라고 하셨는데 float도 가능한 범위를 double형으로
선언하면 메모리 낭비가 아닌지요?
warning 없이 float를 사용하는 방법은 float w=2.3f 뿐이 없는지요.
추가 답변 확인 되는데로 내공드리겠습니다.
실수는 IEEE 754 에서 그 표현 방법이 설명 되어 있습니다..
보다 정확한 내용을 확인하시려면 IEEE 754 문서를 참조 하시구요..
msdn.microsoft.com 에서 발췌했습니다..
The Double value type represents a double-precision 64-bit number with values ranging from negative 1.79769313486232e308 to positive 1.79769313486232e308, as well as positive or negative zero, PositiveInfinity, NegativeInfinity, and Not-a-Number (NaN).
Double complies with the IEC 60559:1989 (IEEE 754) standard for binary floating-point arithmetic.
double이 64bit이고
float가 32bit인건 아시죠??
맨 마지막 줄에 보시면 double은 실수 연산의 standard (기본)이라고 써 있습니다..
그래서 c / c++ 프로그램을 작성할때
float w=2.3; 을 넣어 주면 error가 아닌 warning이 나는 겁니다..
(실수는 double이 기본이라고 정의되어있으니까요..)
warning 없이 프로그램을 작성하시려면
double로 선언 하시던지 아니면
float w=2.3f 이런식으로 꼭 float형인것을 표현해 줘야 합니다..^^
=========================================================================
메모리 낭비인것은 확실합니다.. 32bit면 충분할 공간을 64bit로 선언했으니까요..
하지만 이것 하나만 생각해 보세요..
실수로 입력되는 값이
double에서 float로 truncation(절삭) 될 경우는 자신이 원하지 않는 근사값이 나옵니다..
반면 float 에서 double 로 값이 확장될 경우
float 로 표현하려는 값은 정확하게 double로 표현이 됩니다..
이때문에 기본형이 double이 된것 입니다..
그리고 float 는 소수 6~8자리 double은 소수 14~16자리정도를 표현할수 있습니다..
상수값의 사용에 별도의 명기를 하지 않을 경우
정수는 int 실수는 double 형이 됩니다.
그러므로 2.3이라는 값이 double형이 되지 않고 float형이 되기 위해서는 2.3f or 2.3F 와 같이
float형임을 표시해 명기해 주어야 합니다.
또한 정수 23을 long형으로 한다면 2.3l or 2.3L 로 표기해 주어야 합니다.
float형으로도 가능한 값을 double형으로 하는 것은 최근의 프로그래밍 환경에서 약간의
메모리 낭비가 있더라도 정확도와 안정성을 고려해 언어와 컴파일러 설계시 그리 하는 것으로
압니다.