μ»΄ν¨ν°λ μ€μλ₯Ό νννκΈ° μν λ°©λ²μ λ€μνμ§λ§ λνμ μΌλ‘ κ³ μ μμμ (fixed point) κ³Ό λΆλ μμμ (floating point) μ΄λ€. κ³ μ μμμ μ 10μ§μλ₯Ό 2μ§μμ κ±°λ μ κ³± ν©μΌλ‘ ννν΄ κ·Έλλ‘ λΉνΈμ λ΄μ μ¬μ©νκ³ , λΆλ μμμ μ 2μ§μμ νν λ°©μκ³Ό λΉνΈλ₯Ό μ¬μ©νλ 체κ³κ° λ€λ₯΄λ©° κ°μ₯ λ리 μ°μ΄λ νμ€μ IEEE754 μ΄λ€. IEEE754 λ normalization, μ§μλΆ bias μΆκ° κ³Όμ μ΄ ν¬ν¨λλ€. μλ°μ float λ IEEE754 λ°©μμΌλ‘ κ΄λ¦¬λλ©°, 1bitλ λΆνΈ(sign), 8bitλ μ μλΆ(exponent), 23bitλ κ°μλΆ(mantissa) λ‘ μ€μλ₯Ό κ΄λ¦¬νλ€.


νμ§λ§ μ΄ λ°©μμλ λ¨μ μ΄ μ‘΄μ¬νλ€. κ³ μ μμμ , λΆλ μμμ μ€μ λΆλΆμ κ΄ν λΉνΈλ₯Ό λͺ¨λ μ¬μ©νλ©΄ λλ¨Έμ§ λΉνΈλ λ²λ¦¬κΈ° λλ¬Έμ μ νν κ° λμ κ·Όμ¬μΉ κ°λ§ νννλ€. 10μ§μλ₯Ό 2μ§μλ‘ νννλ κ³Όμ μμ 무ν μμ λλ κ°μ λΆλΆμ μ΄κ³Όνλ μμκ° λ³νλλ©΄ λΉνΈ μΈ λΆλΆμ μ¬λΌμ Έ κ·Όμ¬μΉ κ°λ§ ννλκΈ° λλ¬Έμ κΈμ΅κΆμ΄λ 곡ν κ³μ°κ³Ό κ°μ μ λ°λκ° λμ μ°μ°μ΄ νμν λΉμ¦λμ€μμλ λΆμ ν©νλ€.
class Main {
public static void main(String[] args) {
System.out.println(1.00 - 9 * 0.10); // 0.09999999999999998
}
}
effective java μμλ 3κ°μ§ μμλ€μ κΆμ₯νλ€.
- μμμ μ μ λ°ν μ°μ°μ μν΄μ BigDecimal μ μ¬μ©νμ.
- μ μλ₯Ό μ¬μ©νλ κ²½μ°, int(21μ΅ μ΄ν), long(90κ²½ μ΄ν) μ μ¬μ©νμ.
- float κ³Ό double μ μ¬μ©ν λλ == μ μ¬μ©νμ§ λ§μ.
κ·Έλ¦¬κ³ BigDecimal μ μ¬μ©ν λλ μλλ₯Ό μ£Όμνμ!
- BigDecimal μ μμ±ν λ, double μ μ¬μ©ν΄μ μμ±νμ§ λ§μ.
- μμμ μ νννλ€λ©΄ RoundingMode μ scale λ₯Ό κ³ λ €ν΄μ μ¬μ©νμ.
Reference
- CS50 - κ³ μ μμμ (fixed point)κ³Ό λΆλ μμμ (floating point)
- [μ§λ§μΌ] BigDecimal A to Z: μ νν κ³μ°μ μν μ«μ μ²λ¦¬ ν΄λμ€
- μ΄νν°λΈ μλ° Effective Java 3/E (μμ΄ν 60. μ νν λ΅μ΄ νμνλ€λ©΄ floatμ doubleμ νΌνλΌ)
'π programming-language > java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| νΌμ¬λ ν¨ν΄(Facade Pattern) (0) | 2024.07.08 |
|---|---|
| 컀맨λ ν¨ν΄(command pattern) (0) | 2024.07.08 |
| μ± μ μ°μ ν¨ν΄ (chain of responsibility pattern) (1) | 2024.07.05 |
| μ±κΈν€ ν¨ν΄(singleton pattern) (0) | 2024.07.03 |
| Garbage Collector simple summary (0) | 2024.03.04 |
