Skip to content

Latest commit

Β 

History

History
62 lines (44 loc) Β· 3.29 KB

CH03.md

File metadata and controls

62 lines (44 loc) Β· 3.29 KB

3μž₯_μžλ°”μŠ€ν¬λ¦½νŠΈ κΈ°λ³Έ 문법

Number

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 숫자 νƒ€μž…μ— λŒ€ν•œ ꡬ뢄이 μ—†λ‹€. 항상 64λΉ„νŠΈ λΆ€λ™μ†Œμˆ˜μ μœΌλ‘œ μ €μž₯λœλ‹€. λ”°λΌμ„œ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ 숫자λ₯Ό 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

Number.MAX_SAFE_INTEGER 값인 9007199254740991 μ΄μƒμ˜ μ •μˆ˜μ˜ 경우 μ—°μ‚° μ‹œ 였λ₯˜κ°€ λ°œμƒν•  수 μžˆλ‹€. μ‹€λ¬΄μ—μ„œ μ΄λ ‡κ²Œ 큰 수λ₯Ό λ‹€λ£¨κ±°λ‚˜ λ°˜λ“œμ‹œ μ •ν™•ν•œ 연산을 ν•΄μ•Όν•œλ‹€λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ 숫자λ₯Ό 64λΉ„νŠΈ λΆ€λ™μ†Œμˆ˜μ μ„ μ €μž₯ν•˜λ©΄μ„œ μƒκΈ°λŠ” 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 개발된 μ˜€ν”ˆμ†ŒμŠ€μΈ Big.js, BigNumber.js, Decimal.js와 같은 라이브러리λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.

Number.MAX_SAFE_INTEGER // 9007199254740991
Number.MIN_SAFE_INTEGER // -9007199254740991

ν•¨μˆ˜(Function)

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œλŠ” νŠΉμ • μž‘μ—…μ„ μ—¬λŸ¬λ²ˆ λ°˜λ³΅ν•΄μ•Ό ν•˜λŠ” 경우 ν•΄λ‹Ή μž‘μ—…μ„ μž¬μ‚¬μš© κ°€λŠ₯ν•œ ꡬ쑰둜 λ§Œλ“€κ²Œλ˜λŠ”λ° μ΄λ•Œ μ‚¬μš©ν•˜λŠ” 것이 ν•¨μˆ˜μ΄λ‹€.

  • ν•¨μˆ˜λŠ” νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” 일련의 μ½”λ“œ 블둝을 ν•˜λ‚˜μ˜ μ‹€ν–‰ λ‹¨μœ„λ‘œ λ§Œλ“  것
  • ν•¨μˆ˜ ν‘œν˜„μ‹μ€ λ³€μˆ˜μ— ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•΄μ„œ μ‚¬μš©ν•˜λŠ” 방식
  • ν•¨μˆ˜ μ„ μ–Έλ¬Έ vs ν•¨μˆ˜ ν‘œν˜„μ‹
    • μžλ°”μŠ€ν¬λ¦½νŠΈ 해석 엔진은 선언문을 λ¨Όμ € ν•΄μ„ν•œλ‹€. λ”°λΌμ„œ ν˜ΈμΆœλΆ€κ°€ μ„ μ–Έλ¬Έ 보닀 μœ„μ— μžˆμ–΄λ„ ν•¨μˆ˜κ°€ μ‹€ν–‰λœλ‹€.
    • κ·ΈλŸ¬λ‚˜ λ³€μˆ˜μ— ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•˜λŠ” 방식인 ν•¨μˆ˜ ν‘œν˜„μ‹μ€ μž‘μ„±λœ μ½”λ“œ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰λœλ‹€.

ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 이유

  • μ½”λ“œμ˜ μž¬ν™œμš©
    • 같은 μ½”λ“œλ₯Ό μ€‘λ³΅ν•΄μ„œ μ—¬λŸ¬λ²ˆ μž‘μ„±ν•  ν•„μš” 없이 μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•  수 μžˆλ‹€.
  • μœ μ§€λ³΄μˆ˜ νŽΈμ˜μ„±
    • μ½”λ“œλ₯Ό μˆ˜μ •ν•΄μ•Όν•˜λŠ” 일이 λ°œμƒν–ˆμ„λ•Œ ν•΄λ‹Ή ν•¨μˆ˜μ˜ μ½”λ“œλ§Œ μˆ˜μ •ν•˜λ©΄ ν˜ΈμΆœν•΄ μ‚¬μš©ν•˜λŠ” λͺ¨λ“ κ³³μ— λ°”λ‘œ λ°˜μ˜μ‹œν‚¬ 수 μžˆμœΌλ―€λ‘œ μœ μ§€λ³΄μˆ˜μ˜ νŽΈμ˜μ„±μ„ 높일 수 μžˆλ‹€.
  • μ½”λ“œ 가독성 ν–₯상
    • μ½”λ“œκ°€ κΈ°λŠ₯λ³„λ‘œ ν•¨μˆ˜λΌλŠ” ν•˜λ‚˜μ˜ μ½”λ“œλΈ”λ‘μœΌλ‘œ λͺ¨μ—¬ 있기 λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž¨μ„ 이해할 수 μžˆλŠ” 가독성이 높아진닀.
  • μ½”λ“œ ν’ˆμ§ˆ ν–₯상 및 μ‹ λ’°μ„± 확보

ν•¨μˆ˜λŠ” 전체 ν”„λ‘œκ·Έλž¨μ„ νŠΉμ • λͺ©μ (κΈ°λŠ₯) λ‹¨μœ„λ‘œ 잘게 λ‚˜λˆ„κ³  이λ₯Ό λͺ¨λ“ˆν™”ν•˜μ—¬ 관리할 수 μžˆλ„λ‘ ν•΄μ€€λ‹€. 일반적으둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ „μ²΄μ—μ„œ 반볡적으둜 μ‚¬μš©λ˜λŠ” ν•¨μˆ˜λ“€μ„ λͺ¨μ•„놓은 것을 곡톡 ν•¨μˆ˜ ν˜Ήμ€ 곡톡 λͺ¨λ“ˆμ΄λΌ ν•œλ‹€.