float 형식Type float

부동 소수점 수는 IEEE(Institute of Electrical and Electronics Engineers) 형식을 사용합니다.Floating-point numbers use the IEEE (Institute of Electrical and Electronics Engineers) format. float 형식의 단정밀도 값은 부호 비트, -127승 이진 지수 8비트 및 가수 23비트로 구성된 4바이트를 사용합니다.Single-precision values with float type have 4 bytes, consisting of a sign bit, an 8-bit excess-127 binary exponent, and a 23-bit mantissa. 가수는 1.0에서 2.0 사이의 수를 의미합니다.The mantissa represents a number between 1.0 and 2.0. 가수의 상위 비트가 항상 1이기 때문에 가수의 상위 비트는 수에 저장되지 않습니다.Since the high-order bit of the mantissa is always 1, it is not stored in the number. 이 표현은 float 형식에 대한 약 3.4E–38 ~ 3.4E+38의 범위를 제공합니다.This representation gives a range of approximately 3.4E-38 to 3.4E+38 for type float.

응용 프로그램의 필요에 따라 변수를 float 또는 double 형식으로 선언할 수 있습니다.You can declare variables as float or double, depending on the needs of your application. 두 형식 간의 주요 차이점은 필요한 저장소와 해당 범위의 중요성을 나타낼 수 있다는 점입니다.The principal differences between the two types are the significance they can represent, the storage they require, and their range. 다음 표에서는 중요성과 저장소 요구 사항 간의 관계를 보여 줍니다.The following table shows the relationship between significance and storage requirements.

부동 소수점 형식Floating-Point Types

형식Type 유효 자릿수Significant digits 바이트 수Number of bytes
floatfloat 6 - 76 - 7 44
doubledouble 15 - 1615 - 16 88

부동 소수점 변수는 숫자 값을 포함하는 가수 및 숫자 크기의 순서를 포함하는 지수로 표시됩니다.Floating-point variables are represented by a mantissa, which contains the value of the number, and an exponent, which contains the order of magnitude of the number.

다음 표에서는 각 부동 소수점 형식에 대한 가수 및 지수에 할당된 비트 수를 보여 줍니다.The following table shows the number of bits allocated to the mantissa and the exponent for each floating-point type. 모든 float 또는 double의 가장 중요한 비트는 항상 부호 비트입니다.The most significant bit of any float or double is always the sign bit. 1이면 음수로 간주되고, 그렇지 않으면 양수로 간주됩니다.If it is 1, the number is considered negative; otherwise, it is considered a positive number.

지수 및 가수의 길이Lengths of Exponents and Mantissas

형식Type 지수 길이Exponent length 가수 길이Mantissa length
floatfloat 8비트8 bits 23비트23 bits
doubledouble 11비트11 bits 52비트52 bits

지수는 부호 없는 형식으로 저장되기 때문에 가능한 값의 절반으로 오차가 지정됩니다.Because exponents are stored in an unsigned form, the exponent is biased by half its possible value. float 형식의 경우 편차는 127이고 double 형식의 경우 편차는 1023입니다.For type float, the bias is 127; for type double, it is 1023. 지수 값에서 편차 값을 빼 실제 지수 값을 계산할 수 있습니다.You can compute the actual exponent value by subtracting the bias value from the exponent value.

가수는 1보다 크거나 같고 2보다 작은 이진 소수로 저장됩니다.The mantissa is stored as a binary fraction greater than or equal to 1 and less than 2. Float 및 double 형식의 경우 암시된 선행 1이 가장 중요한 비트 위치의 가수에 있기 때문에 가장 중요한 비트가 메모리에 저장되지 않는 경우라도 가수의 길이는 실제로 각각 24비트 또는 53비트입니다.For types float and double, there is an implied leading 1 in the mantissa in the most-significant bit position, so the mantissas are actually 24 and 53 bits long, respectively, even though the most-significant bit is never stored in memory.

위에서 설명한 저장소 메서드 대신, 부동 소수점 패키지는 이진 부동 소수점 수를 비정규화된 수로 저장할 수 있습니다.Instead of the storage method just described, the floating-point package can store binary floating-point numbers as denormalized numbers. "비정규화된 수"는 가수의 가장 중요한 비트가 0인 예약된 지수 값이 있는 0이 아닌 부동 소수점 수입니다."Denormalized numbers" are nonzero floating-point numbers with reserved exponent values in which the most-significant bit of the mantissa is 0. 비정규화된 형식을 사용함으로써 정밀도 대신 부동 소수점 수의 범위를 확장할 수 있습니다.By using the denormalized format, the range of a floating-point number can be extended at the cost of precision. 부동 소수점 수가 정규화된 형식 또는 비정규화된 형식으로 표현되는지 여부를 제어할 수 없습니다. 즉, 부동 소수점 패키지로 표현을 결정합니다.You cannot control whether a floating-point number is represented in normalized or denormalized form; the floating-point package determines the representation. 지수가 정규화된 형식으로 표현될 수 있는 최소값보다 작아지지 않으면 부동 소수점 패키지는 비정규화된 형식을 사용하지 않습니다.The floating-point package never uses a denormalized form unless the exponent becomes less than the minimum that can be represented in a normalized form.

다음 표에서는 각 부동 소수점 형식의 변수에 저장할 수 있는 최소값 및 최대값을 보여 줍니다.The following table shows the minimum and maximum values you can store in variables of each floating-point type. 이 표에 나열된 값은 정규화된 부동 소수점 수에만 적용되므로 비정규화된 부동 소수점 수의 최소값은 보다 작습니다.The values listed in this table apply only to normalized floating-point numbers; denormalized floating-point numbers have a smaller minimum value. 80x87 레지스터에 유지되는 수는 항상 80비트의 정규화된 형식으로 표현됩니다. 수는 32비트 또는 64비트 부동 소수점 변수(float 형식 및 long 형식의 변수)에 저장될 때만 비정규화된 형식으로 표현될 수 있습니다.Note that numbers retained in 80x87 registers are always represented in 80-bit normalized form; numbers can only be represented in denormalized form when stored in 32-bit or 64-bit floating-point variables (variables of type float and type long).

부동 소수점 형식의 범위Range of Floating-Point Types

형식Type 최소값Minimum value 최대값Maximum value
floatfloat 1.175494351 E - 381.175494351 E - 38 3.402823466 E + 383.402823466 E + 38
doubledouble 2.2250738585072014 E - 3082.2250738585072014 E - 308 1.7976931348623158 E + 3081.7976931348623158 E + 308

정밀도가 저장소보다 작으면 부동 소수점 변수에 대해 float 형식을 사용해 보십시오.If precision is less of a concern than storage, consider using type float for floating-point variables. 반대로 정밀도가 가장 중요한 기준인 경우 double 형식을 사용하십시오.Conversely, if precision is the most important criterion, use type double.

부동 소수점 변수를 보다 중요한 형식으로 승격할 수 있습니다(float 형식에서 double 형식으로).Floating-point variables can be promoted to a type of greater significance (from type float to type double). 부동 소수점 변수에 대한 산술 연산을 수행할 때 확장이 자주 발생합니다.Promotion often occurs when you perform arithmetic on floating-point variables. 이 연산은 최고의 정밀도를 가지고 있는 변수와 같은 높은 정밀도에서 항상 수행됩니다.This arithmetic is always done in as high a degree of precision as the variable with the highest degree of precision. 예를 들어 다음 형식 선언을 참조하십시오.For example, consider the following type declarations:

float f_short;  
double f_long;  
long double f_longer;  

f_short = f_short * f_long;  

위 예제에서는 f_short 변수가 double 형식으로 승격되어 f_long으로 곱해지면 결과가 f_short에 할당되기 전에 float 형식으로 반올림됩니다.In the preceding example, the variable f_short is promoted to type double and multiplied by f_long; then the result is rounded to type float before being assigned to f_short.

다음 예제에서(이전 예제의 선언 사용) 변수에 대한 부동 소수점(32비트) 정밀도로 산술이 수행됩니다. 그러면 결과가 double 형식으로 승격됩니다.In the following example (which uses the declarations from the preceding example), the arithmetic is done in float (32-bit) precision on the variables; the result is then promoted to type double:

f_longer = f_short * f_short;  

참고 항목See Also

기본 형식의 저장소Storage of Basic Types