μλ°μ€ν¬λ¦½νΈλ μ«μ νμ μ λν ꡬλΆμ΄ μλ€. νμ 64λΉνΈ λΆλμμμ μΌλ‘ μ μ₯λλ€. λ°λΌμ μλ°μ€ν¬λ¦½νΈκ° μ«μλ₯Ό 64λΉνΈ λΆλμμμ μΌλ‘ μ μ₯νκΈ° λλ¬Έμ λ°μνλ λ¬Έμ κ° μλ€.
let x2 = 0.2 + 0.1; // xμ ν λΉλ μ€μ κ°μ 0.3μ΄ μλλΌ 0.30000000000000004 κ° λ¨
μ΄ λ¬Έμ λ μλ°μ€ν¬λ¦½νΈκ° νμ 64λΉνΈ λΆλμμμ μΌλ‘ μ«μλ₯Ό μ μ₯νκΈ°λλ¬Έμ λ°μνλ λ¬Έμ μ΄λ€.
64λΉνΈ λΆλμμμ = λΆνΈλΉνΈ(1λΉνΈ) + μ§μλΆ(11λΉνΈ) + κ°μλΆ(52λΉνΈ)
(0.1).toString(2); // toStringν¨μ μΈμμ 2λ₯Ό λ£μΌλ©΄ 2μ§μλ‘ λ³νν΄μ€
// 2μ§μλ₯Ό 10μ§μλ‘ λ³ν
parseInt("0100~~", 2) * Math.pow(2, -55)
μΌλ°μ μΌλ‘ μΉ μ΄ν리μΌμ΄μ μμλ μμμ μ΄νλ₯Ό λ μ리, λ§μλ 5μ리 λμ΄κ°μ§μκ² μ¬μ©νκΈ° λλ¬Έμ μ€λ¬΄μμ μ ν리μΌμ΄μ μ κ°λ°ν λ μ«μλ₯Ό 64λΉνΈ λΆλμμμ μΌλ‘ μ μ₯νλ©΄μ μκΈ°λ λ¬Έμ κ° μ λ°μλμ§ μλλ€.
Number.MAX_SAFE_INTEGER κ°μΈ 9007199254740991 μ΄μμ μ μμ κ²½μ° μ°μ° μ μ€λ₯κ° λ°μν μ μλ€. μ€λ¬΄μμ μ΄λ κ² ν° μλ₯Ό λ€λ£¨κ±°λ λ°λμ μ νν μ°μ°μ ν΄μΌνλ€λ©΄ μλ°μ€ν¬λ¦½νΈκ° μ«μλ₯Ό 64λΉνΈ λΆλμμμ μ μ μ₯νλ©΄μ μκΈ°λ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ κ°λ°λ μ€νμμ€μΈ Big.js, BigNumber.js, Decimal.jsμ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄ λλ€.
Number.MAX_SAFE_INTEGER // 9007199254740991
Number.MIN_SAFE_INTEGER // -9007199254740991
νλ‘κ·Έλλ° μΈμ΄μμλ νΉμ μμ μ μ¬λ¬λ² λ°λ³΅ν΄μΌ νλ κ²½μ° ν΄λΉ μμ μ μ¬μ¬μ© κ°λ₯ν κ΅¬μ‘°λ‘ λ§λ€κ²λλλ° μ΄λ μ¬μ©νλ κ²μ΄ ν¨μμ΄λ€.
- ν¨μλ νΉμ κΈ°λ₯μ μννλ μΌλ ¨μ μ½λ λΈλ‘μ νλμ μ€ν λ¨μλ‘ λ§λ κ²
- ν¨μ ννμμ λ³μμ ν¨μλ₯Ό ν λΉν΄μ μ¬μ©νλ λ°©μ
- ν¨μ μ μΈλ¬Έ vs ν¨μ ννμ
- μλ°μ€ν¬λ¦½νΈ ν΄μ μμ§μ μ μΈλ¬Έμ λ¨Όμ ν΄μνλ€. λ°λΌμ νΈμΆλΆκ° μ μΈλ¬Έ λ³΄λ€ μμ μμ΄λ ν¨μκ° μ€νλλ€.
- κ·Έλ¬λ λ³μμ ν¨μλ₯Ό ν λΉνλ λ°©μμΈ ν¨μ ννμμ μμ±λ μ½λ μμλλ‘ μ€νλλ€.
- μ½λμ μ¬νμ©
- κ°μ μ½λλ₯Ό μ€λ³΅ν΄μ μ¬λ¬λ² μμ±ν νμ μμ΄ μ½λλ₯Ό μ¬μ¬μ©ν μ μλ€.
- μ μ§λ³΄μ νΈμμ±
- μ½λλ₯Ό μμ ν΄μΌνλ μΌμ΄ λ°μνμλ ν΄λΉ ν¨μμ μ½λλ§ μμ νλ©΄ νΈμΆν΄ μ¬μ©νλ λͺ¨λ κ³³μ λ°λ‘ λ°μμν¬ μ μμΌλ―λ‘ μ μ§λ³΄μμ νΈμμ±μ λμΌ μ μλ€.
- μ½λ κ°λ
μ± ν₯μ
- μ½λκ° κΈ°λ₯λ³λ‘ ν¨μλΌλ νλμ μ½λλΈλ‘μΌλ‘ λͺ¨μ¬ μκΈ° λλ¬Έμ νλ‘κ·Έλ¨μ μ΄ν΄ν μ μλ κ°λ μ±μ΄ λμμ§λ€.
- μ½λ νμ§ ν₯μ λ° μ λ’°μ± ν보
ν¨μλ μ 체 νλ‘κ·Έλ¨μ νΉμ λͺ©μ (κΈ°λ₯) λ¨μλ‘ μκ² λλκ³ μ΄λ₯Ό λͺ¨λννμ¬ κ΄λ¦¬ν μ μλλ‘ ν΄μ€λ€. μΌλ°μ μΌλ‘ μ ν리μΌμ΄μ μ 체μμ λ°λ³΅μ μΌλ‘ μ¬μ©λλ ν¨μλ€μ λͺ¨μλμ κ²μ κ³΅ν΅ ν¨μ νΉμ κ³΅ν΅ λͺ¨λμ΄λΌ νλ€.