μΆμ²
ChatGPT
'float'μ 'double' λ°μ΄ν° νμ μ λΆλ μμμ μ(floating-point numbers)λ‘, μ»΄ν¨ν° μμ€ν μμ μ€μλ₯Ό νννκΈ° μν΄ μ¬μ©λλ€. νμ§λ§ μ΄λ€μ μ λ°λ(precision)μ νκ³ λλ¬Έμ νΉμ ν λ²μλ λΉνΈ μλ₯Ό λμ΄μλ©΄ μ νμ±μ 보μ₯ν μ μλ€.
λΆλ μμμ μμ νν λ°©μ
λΆλ μμμ μλ IEEE 754 νμ€μ λ°λΌ μ μ₯λλ©°, μ΄ λ°©μμ μ«μλ₯Ό μ μ₯νκΈ° μν΄ λ€μκ³Ό κ°μ μΈ κ°μ§ κ΅¬μ± μμλ‘ μ΄λ£¨μ΄μ Έ μλ€.
'μμ΄νΈλ¦¬νμ΄' λΌκ³ μ½λλ€.
1. λΆνΈ λΉνΈ Sign Bit
- μ«μκ° μμμΈμ§ μμμΈμ§λ₯Ό λνλΈλ€.
- 1λΉνΈλ₯Ό μ¬μ©νλ€.
2. μ§μλΆ Exponent
- μ«μμ λ²μλ₯Ό κ²°μ νλ λ° μ¬μ©λλ€. μ«μλ₯Ό 2μ κ±°λμ κ³±μΌλ‘ νννλ€.
- 'float' λ 8λΉνΈλ₯Ό μ¬μ©νκ³ , 'double'μ 11λΉνΈλ₯Ό μ¬μ©νλ€.
3. κ°μλΆ Significand or Mantissa
- μ«μμ μ νμ±μ λνλΈλ€.
- 'float'λ 23λΉνΈλ₯Ό μ¬μ©νκ³ , 'double'μ 52λΉνΈλ₯Ό μ¬μ©νλ€.
- κ°μλΆλ 1.XXXX... νμμ μμμ μ΄ν λΆλΆμ μ μ₯νλ€.(μμμ 1μ΄ μ‘΄μ¬)
IEEE 754 λΆλ μμμ νμ
Float(λ¨μ λ, 32λΉνΈ)
floatλ₯Ό 'λ¨μ λ'λΌκ³ λ λΆλ₯΄λ보λ€.
- 1λΉνΈ : λΆνΈ (Sign)
- 8λΉνΈ : μ§μ(Exponent)
- 23λΉνΈ : κ°μ(Mantissa)
Double(λ°°μ λ, 64λΉνΈ)
doubleμ 'λ°°μ λ'λΌκ³ λ λΆλ₯΄λ보λ€.
- 1λΉνΈ : λΆνΈ(Sign)
- 11λΉνΈ : μ§μ (Exponent)
- 52λΉνΈ : κ°μ (Mantissa)
μ νμ±μ νκ³
λΆλ μμμ μ λ§€μ° ν° μλ λ§€μ° μμ μλ₯Ό ννν μ μλ μ μ°μ±μ μ 곡νμ§λ§, μ λ°λ(precision)μ κ΄λ ¨νμ¬ λͺ κ°μ§ νκ³κ° μ‘΄μ¬νλ€ μ£Όμ μ΄μ λ λ€μκ³Ό κ°λ€.
1. μ νν λΉνΈ μ
μ λ°λμ μ ν
'float'λ 32λΉνΈ, 'double'μ 64λΉνΈλ‘ ννλλ€. μ΄ λΉνΈ μκ° κ³ μ λμ΄ μκΈ° λλ¬Έμ λͺ¨λ μ€μλ₯Ό μ ννκ² ννν μ μλ€.
μλ₯Ό λ€μ΄, 'float'μ κ°μλΆλ 23λΉνΈλ‘ μ νλμ΄ μμ΄ μ½κ°μ μ λ°λ μμ€μ΄ λ°μν μ μλ€.
2. 무νν μ€μ μ§ν©μ νν
μ€μμ 무νμ±
μ€μλ 무νλμ κ±Έμ³ μ‘΄μ¬νμ§λ§, μ»΄ν¨ν°λ μ νν λ©λͺ¨λ¦¬λ§μ μ¬μ©ν΄ μ€μλ₯Ό ννν΄μΌ νλ€. μ΄λ μ νλλ₯Ό μμ€ν μ λ°μ μκ² λ§λ λ€.
μλ₯Ό λ€μ΄, 0.1μ μ ννκ² μ΄μ§μλ‘ ννν μ μλ€.
3. κ·Όμ¬μΉ νν
κ·Όμ¬μΉμ μν μ€μ°¨
λ§μ μ€μλ μ΄μ§ λΆλ μμμ νμμΌλ‘ μ ννκ² ννν μ μμΌλ©°, μ΄λ κ·Όμ¬μΉλ‘ μ μ₯λλ€.
μ΄λ¬ν κ·Όμ¬μΉ λλ¬΄λ€ λΆλ μμμ μ°μ°μμ μ€μ°¨κ° λμ λ μ μλ€.
4. μ κ·ν λ° λΉμ κ·ν μ«μ
λΆλ μμμ μ«μλ₯Ό ννν λ μ»΄ν¨ν° μμ€ν μμ μ€μλ₯Ό νννκΈ° μν λ κ°μ§ νμμΌλ‘ μ κ·ν μ«μμ λΉμ κ·ν μ«μλ₯Ό μ¬μ©νλ€.
μ κ·ν(Normalized) μ«μ
μ κ·νλ μ«μλ κ°μλΆκ° 1λ‘ μμνλ νμμ κ°μ§λ€. κ·Έλ¬λ νΉμ μν©μμλ λΉμ κ·νλ μ«μκ° λ°μν μ μλ€.
μμΈ μ€λͺ
μ κ·ν μ«μ Normalized Number
μ κ·νλ μ«μλ λΆλ μμμ ννμμ κ°μ₯ μΌλ°μ μΈ νμμΌλ‘, μ«μκ° κ°μ₯ ν¨μ¨μ μΌλ‘ ννλλλ‘ νλ€. μ κ·νλ μ«μλ κ°μ(Mantissa) λΆλΆμ΄ νΉμ νμμ κ°λλ‘ ν΄ μ΅λν λ§μ μ ν¨ μλ¦Ώμλ₯Ό μ¬μ©νλ€.
νν λ°©μ
μ κ·νλ λΆλ μμμ μ«μλ λ€μκ³Ό κ°μ νμμ κ°λλ€.
- λΆνΈ λΉνΈ (Sign Bit) : μ«μκ° μμμΈμ§ μμμΈμ§λ₯Ό λνλΈλ€.
- μ§μ(Exponent) : μ«μμ μ€μΌμΌμ μ‘°μ νλ€. μ κ·νλ μ«μλ μ§μκ° νΉμ λ²μ λ΄μ μμ΄μΌ νλ€.
- κ°μ(Mantissa) : 1.XXXX νμμΌλ‘ μ μ₯λμ΄, μμμ μλμ κ°μ νννλ€. μμμ 1(implicit 1)μ μ¬μ©ν΄ ν¨μ¨μ±μΌλ‘ λμΈλ€.
νΉμ§
- μμμ 1 : κ°μ λΆλΆμ νμ 1λ‘ μμνλ€. μ΄λ μ€μ λ‘ μ μ₯λμ§ μμΌλ©°, μμμ μΌλ‘ κ°μ λλ€.
- μ΅λ μ ν¨ μλ¦Ώμ : μ κ·νλ νμμ κ°μμ κ°μ₯ λ§μ μ ν¨ μλ¦Ώμλ₯Ό ν¬ν¨νμ¬ μ«μμ μ νμ±μ λμΈλ€.
- μ§μ λ²μ : μ§μλ νΉμ λ²μ λ΄μ μμ΄μΌ νλ©°, μ΄λ₯Ό λ²μ΄λλ κ²½μ° μ€λ²νλ‘μ°κ° λ°μνλ€.
μμ
// μμ: μ κ·νλ float κ°
float example = 3.14f;
// IEEE 754 νν:
Sign: 0
Exponent: 128 (0b10000000)
Mantissa: 0b10010011001100110011010 (μ κ·νλ νμ)
μ΄ κ²½μ°, λΆνΈ λΉνΈλ 0(μμ), μ§μλ 128(0μ κΈ°μ€μΌλ‘), κ°μλ 0.31415926...μ΄λ€.
μ₯μ
- μ΅λ μ λ°λ μ 곡 : μ κ·νλ νμμ κ°λ₯ν μ΅λνμ μ ν¨ μλ¦Ώμλ₯Ό μ 곡νμ¬ κ³μ°μ μ νμ±μ μ μ§νλ€.
- ν¨μ¨μ μ μ₯ : μμμ 1μ μ¬μ©ν΄μ λΉνΈμ μ¬μ©μ μ΅μννκ³ μ΅λνμ μ 보λ₯Ό μ μ₯νλ€.
λΉμ κ·ν(Denormalized) μ«μ
λ§€μ° μμ μλ λΉμ κ·νλμ΄ μ μ₯λλ©°, μ΄λ κ°μμ κ°μ₯ μμλ¦¬κ° 0μ΄ λλ€. λΉμ κ·ν μ«μλ μ λ°λκ° λ λ¨μ΄μ§λ€.
μμΈ μ€λͺ
λΉμ κ·ν μ«μ Denormalized Number (= μλΈλ Έλ© κ° Subnormal Numbers)
λΉμ κ·νλ μ«μλ λ§€μ° μμ μ«μλ₯Ό νννκΈ° μν νμμΌλ‘, μ κ·νλ νμμ΄ μ 곡ν μ μλ μμ κ°μ μ²λ¦¬ν μ μλλ‘ νλ€.
νν λ°©μ
λΉμ κ·νλ λΆλ μμμ μ«μλ λ€μκ³Ό κ°μ νμμ κ°λλ€.
- λΆνΈ λΉνΈ (Sign Bit) : μ«μμ λΆνΈλ₯Ό λνλΈλ€.
- μ§μ (Exponent) : λͺ¨λ λΉνΈκ° 0μΈ κ²½μ° λΉμ κ·νλ νμμΌλ‘ κ°μ£Όνλ€.
- κ°μ (Mantissa) : 0.XXXX νμμΌλ‘ μ μ₯λμ΄, μμμ μλμ κ°μ νννλ€. μμμ 1μ΄ μ‘΄μ¬νμ§ μλλ€.
νΉμ§
- λͺ μμ 0 : κ°μ λΆλΆμ 0μΌλ‘ μμνλ€. μμμ 1μ΄ μ‘΄μ¬νμ§ μμΌλ―λ‘, μμμ μλμ μ«μλ§ ν¬ν¨λλ€.
- νμ₯λ λ²μ : λΉμ κ·νλ νμμΌλ‘ 0μ λ§€μ° κ°κΉμ΄ κ°μ ννν μ μλ λ₯λ ₯μ μ κ³΅ν΄ λ²μλ₯Ό νμ₯νλ€.
- μ λ°λ μμ€ : μμμ 1μ΄ μκΈ° λλ¬Έμ μ λ°λκ° λ¨μ΄μ§ μ μλ€.
μμ
// μμ: λΉμ κ·νλ float κ°
float denormalExample = 1.4e-45f;
// IEEE 754 νν:
Sign: 0
Exponent: 0 (λΉμ κ·ν μν)
Mantissa: 0b00000000000000000000001 (λΉμ κ·νλ νμ)
μ΄ κ²½μ°, λΆνΈ λΉνΈλ 0, μ§μλ 0(λΉμ κ·ν μν), κ°μλ κ°μ₯ μμ λΉνΈλ§ νμ±νλ μνλ€.
μ₯μ
- νμ₯λ νν λ²μ : λ§€μ° μμ κ°μ μ²λ¦¬ν μ μλ λ₯λ ₯μ μ 곡νλ€.
- μλΈλ Έλ© κ° μΆλ¦¬ : μ κ·νλ νμμΌλ‘ μ²λ¦¬ν μ μλ μλΈλ Έλ© κ°μ ννν μ μλ€.
μ κ·νμ λΉμ κ·νμ μ°¨μ΄μ
νΉμ§ | μ κ·ν μ«μ | λΉμ κ·ν μ«μ |
κ°μ Mantissa | μμμ 1 ν¬ν¨(1.XXXX) | λͺ μμ 0 ν¬ν¨(0.XXXX) |
μ λ°λ Precision | μ΅λ μ ν¨ μλ¦Ώμ μ 곡 | κ°μλ μ λ°λ |
λ²μ Range | λμ λ²μ νν | 0μ κ°κΉμ΄ μμ κ° νν |
μ§μ Exponent | μΌλ°μ μΈ λ²μ λ΄μμ μ¬μ© | λͺ¨λ λΉνΈκ° 0μΌ λ λΉμ κ·νλ‘ κ°μ£Ό |
μ ν¨μ± Validity | λ§€μ° μμ μλ νν λΆκ° | λ§€μ° μμ μ νν κ°λ₯ |
μ€λ²νλ‘μ° Overflow | ν° κ° μ²λ¦¬μ ν¨κ³Όμ | λ§€μ° μμ μμμλ§ μ¬μ© |
μΈλνλ‘μ° Undreflow | μ€λ²νλ‘μ° λ° μΈλνλ‘μ° λ°μ κ°λ₯ | μμ κ°μ λν μΈλνλ‘μ° λ°©μ§ |
μ κ·νμ λΉμ κ·νμ νμ©
μ κ·ν
- μ£Όλ‘ μΌλ°μ μΈ μμΉ κ³μ°μμ μ¬μ©λλ©°, μ΅λνμ μ λ°λλ₯Ό μ μ§νλ€.
- κ³μ°μμ κ°μ₯ ν¨μ¨μ μΈμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©ν΄, λλΆλΆμ λΆλ μμμ μ°μ°μ΄ μ κ·νλ μνλ‘ μ²λ¦¬λλ€.
λΉμ κ·ν
- λ§€μ° μμ κ°μ λ€λ£° λ μ€μνλ©°, μλΈλ Έλ© κ°μ΄ νμν μν©μμ μ¬μ©λλ€.
- κ³Όνμ κ³μ°μμ λ§€μ° μμ κ°μ΄ μ€μν λ λΉμ κ·ν μνλ‘ ννλμ΄μΌ νλ€.
- λΉμ κ·νλ μ«μλ νΉν μΈλνλ‘μ°λ₯Ό λ°©μ§νλ λ° μ μ©νλ€.
μ λ²μλ₯Ό λμ΄μλ©΄ μ νμ±μ 보μ₯νμ§ λͺ»νλκ°?
1. νν κ°λ₯ν μ ν¨ μλ¦Ώμ μ ν
μ λ°λ μ ν
'float'λ μ½ 7μ리, 'double'μ μ½ 15μ리μ μ ν¨ μλ¦Ώμ(significant digits)λ§ μ ννκ² ννν μ μλ€. μ΄ νκ³λ₯Ό λμ΄κ°λ κ²½μ°, λ μμ λ³νλ λ°μλμ§ μμ μ μλ€.
// μμ: floatμ μ λ°λ
float a = 1234567.0f; // μ ν
float b = 12345678.0f; // λΆμ ν, λ°μ¬λ¦Ό λ°μ
2. μ§μ λ²μμ μ ν
μ€λ²νλ‘μ°μ μΈλνλ‘μ°
'float'μ 'double'μ νν κ°λ₯ν μμ λ²μκ° νμ λμ΄ μλ€. λ무 ν° κ°μ΄λ λ무 μμ κ°μ μ€λ²νλ‘μ°(overflow)λ μΈλνλ‘μ°(underflow)λ‘ μΈν΄ 무νλ λλ 0μΌλ‘ μ²λ¦¬λλ€.
// μμ: floatμ μ€λ²νλ‘μ°
float large = 3.4028235e38f; // μ΅λκ°μ κ°κΉμ΄ κ°
float overflow = large * 2.0f; // Infinity
3. μ°μ° μ€ λμ μ€μ°¨
μ°μ° λμ μ€λ₯
λ°λ³΅μ μΈ λΆλ μμμ μ°μ°μ λμ μ€μ°¨λ₯Ό μ΄λν μ μλ€. μ΄λ νΉν λ°λ³΅λ¬Έμ΄λ λμ κ³μ°μμ μ¬κ°ν μν₯μ λ―ΈμΉ μ μλ€.
// μμ: λΆλ μμμ λμ μ€μ°¨
float sum = 0.0f;
for (int i = 0; i < 100000; i++) {
sum += 0.0001f;
}
System.out.println("Sum: " + sum); // μμ κ°: 10.0, μ€μ μΆλ ₯: 9.999999
λμ λ° ν΄κ²° λ°©λ²
λΆλ μμμ μ μ λ°λ λ¬Έμ λ₯Ό μμ ν ν΄κ²°ν μλ μμ§λ§, λͺ κ°μ§ λμμ ν΅ν΄ λ¬Έμ λ₯Ό μνν μ μλ€.
1. μ μ μ°μ° μ¬μ©
κ°λ₯ν κ²½μ° μ μ μ°μ°μ μ¬μ©ν΄ μ λ°λλ₯Ό μ μ§νλ€.
2. κ³ μ μμμ νν
κ³ μ μμμ (fixed-point) ννμ μ¬μ©ν΄ μ λ°λλ₯Ό κ°μ νλ€.
3. ν° μλ₯Ό λ€λ£° λ BigDecimal μ¬μ©
Javaμ 'BigDecimal' ν΄λμ€λ λΆλ μμμ λμ μ νν μμ μ°μ°μ μ 곡νλ€.
4. κ³μ° μμ μ΅μ ν
κ³μ° μμλ₯Ό λ³κ²½ν΄ μ€μ°¨ λμ μ μ΅μννλ€.
5. μ€μ°¨ μ ν κ΄λ¦¬
μ€μ μ°μ° μ μ μ€μ°¨ μ νλ₯Ό μ΅μννλλ‘ μ€κ³νλ€.
'λΉ κ΅¬λ© μ±μ°κΈ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ©μ΄] κ΅μ ν(i18n)λ° μ§μν(l19n) (0) | 2024.08.06 |
---|---|
[μ©μ΄][Java] λ¬Έμμ΄ λ¦¬ν°λ΄ String Literal (0) | 2024.08.05 |
[μ©μ΄] μ€λ²νλ‘μ°(Overflow), μΈλνλ‘μ°(Underflow) (0) | 2024.08.02 |
[μ©μ΄] CPU μν€ν μ² (2) | 2024.08.02 |
[OS] 32λΉνΈμ 64λΉνΈ OSμ μ°¨μ΄μ (0) | 2024.08.02 |