TIL - CS Study (1.1 + 0.1 > 1.2)

BUMSUΒ·2022λ…„ 9μ›” 9일
0

TIL - Today I Learned

λͺ©λ‘ 보기
23/25
post-thumbnail

1.1 + 0.1 == 1.2
< false

πŸ“• κ°œλ°œλ©΄μ ‘ κ΄€λ ¨ 곡뢀

μœ„ μˆ˜μ‹μ΄ ν‹€λ¦° μ΄μœ λŠ”??

1.1 + 0.1 > 1.2
< true




πŸ“– 1. Ram

  • 0κ³Ό 1을 많이 μ €μž₯ν•  수 μžˆλŠ” λ©”λͺ¨λ¦¬

πŸ“Œ 숫자λ₯Ό 넣을 수 μžˆλŠ” 칸이 8개인 경우 (2μ§„λ²•μœΌλ‘œ μ €μž₯)

  • 숫자 5인 경우

  • 숫자 8인 경우

  • 숫자 10인 경우

  • 더 큰 숫자λ₯Ό μ €μž₯ν•˜κ³  싢은 경우
    16칸으둜 λŠ˜λ €μ„œ μ €μž₯ν•  수 μžˆλ‹€.




πŸ“– 2. μ†Œμˆ˜ μ €μž₯

5.125같은 μ†Œμˆ˜ μ €μž₯은?
5.125 => 101.001(2μ§„μˆ˜)
(이거말고 IEEEλΌλŠ” κ³³μ—μ„œ ꢌμž₯ν•˜λŠ” 방법이 μžˆλ‹€)

5.125 μ €μž₯ν•˜λ €λ©΄ 32μΉΈ μ •λ„μ˜ μ—¬μœ μžˆλŠ” 칸을 λ§Œλ“€μ–΄λ‘κ³ 

πŸ“Œ μ²«λ²ˆμ§ΈμΉΈμ—λŠ” 숫자의 λΆ€ν˜Έλ₯Ό λ„£μ–΄μ€€λ‹€.

  • μ–‘μˆ˜μΈμ§€ μŒμˆ˜μΈμ§€ μ—¬λΆ€ 확인

  • μ–‘μˆ˜λΌλ©΄ 0, 음수라면 1을 κΈ°μž…ν•΄μ€€λ‹€.

  • μ €μž₯ν•  숫자λ₯Ό 2μ§„λ²•μœΌλ‘œ λ³€ν™˜μ„ ν•œ λ‹€μŒμ— . 찍은 뢀뢄을 μ™Όμͺ½μœΌλ‘œ λκΉŒμ§€ 이동을 ν•΄μ€€λ‹€.
    - 5.125 => 101.001 => 1.01001 x 22
    - 1.011001 x 22 (5.125 2μ§„μˆ˜ 버전)

  • 1.01001 μ—¬κΈ°μ—μ„œ . 뒀에 ν•΄λ‹Ήν•˜λŠ” λΆ€λΆ„ 01001을 mantissa라고 λΆ€λ₯Έλ‹€.


πŸ“Œ matissaλž€?

  • λΆ€λ™μ†Œμˆ˜μ  λ°©μ‹μ—μ„œ κ°€μˆ˜λΆ€λΌκ³  뢈리며, 23λΉ„νŠΈ, κ°€μˆ˜ λ˜λŠ” 유효숫자λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

  • 맨뒀에 23칸에 λ°€μ–΄λ„£λŠ”λ‹€.

  • μ§€μˆ˜ 뢀근에 2 + 127 => 10000001 (2μ§„λ²•μœΌλ‘œ λ³€ν™˜ν•΄μ„œ μ•žμ— 8칸에 λ„£μ–΄μ€€λ‹€)


πŸ“Œ μˆœν™˜μ†Œμˆ˜ 문제

  • 10μ§„μˆ˜ 0.125 숫자 같은 κ²½μš°μ—λŠ” 2μ§„μˆ˜λ‘œ λ³€ν™˜ν•  μ‹œ 0.001 μ΄λΌλŠ” 숫자둜 κΉ”λ”ν•˜κ²Œ λ³€ν™˜μ΄ λœλ‹€.

  • ν•˜μ§€λ§Œ, 0.1 같은 μ• λ§€ν•œ μˆ«μžλŠ” 2μ§„μˆ˜λ‘œ λ³€ν™˜ν•  경우 λ¬΄ν•œ 1100 νŒ¨ν„΄μ΄ λ°˜λ³΅λœλ‹€.

πŸ“• 해결방법

  • 0.1 같이 λ¬΄ν•œ νŒ¨ν„΄μ΄ λ°˜λ³΅λ˜λŠ” 숫자의 경우 32μΉΈκΉŒμ§€λ§Œ ν‘œμ‹œν•΄μ£Όλ©΄ λœλ‹€.

  • 32칸에 넣은 μˆ«μžμ™Έμ— ν‘œμ‹œν•΄μ£Όμ§€ μ•Šμ€ μˆ«μžμ— λŒ€ν•΄ μ˜€μ°¨κ°€ λ°œμƒν•  수 μžˆλ‹€.

  • μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ‹€κ°€ 0.1 같은 숫자λ₯Ό λ©”λͺ¨λ¦¬μ— μ €μž₯ν–ˆλ‹€κ³  해도 μ •ν™•ν•œ 숫자 0.1λ₯Ό μ €μž₯ν•œκ²Œ μ•„λ‹ˆλ‹€. 0.1κ³Ό λΉ„μŠ·ν•œ 숫자λ₯Ό μ €μž₯ν–ˆμ„ 뿐이닀.

  • κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 0.1κ³Ό 1.1 을 λ”ν–ˆμ„ λ•Œ λ‚˜μ˜€λŠ” μˆ«μžκ°€ 1.2κ°€ μ•„λ‹ˆλ‹€.

μ •ν™•νžˆ κ³„μ‚°ν•˜λ €λ©΄ μˆ«μžλŠ” μ •μˆ˜λ‘œ λ³΄κ΄€ν•΄μ•Όν•œλ‹€.

  • 예λ₯Ό λ“€λ©΄, 5.1 λ‹¬λŸ¬μΈ κ²½μš°λŠ” 5100μ„ΌνŠΈλ‘œ x100을 κ³±ν•΄μ„œ μ €μž₯ν•˜λŠ”κ²Œ μ’‹λ‹€.

  • floatλ₯Ό ꡳ이 μ¨μ•Όν•˜λŠ” κ²½μš°μ—λŠ” 반올림 문법을 μ‚¬μš©ν•˜λŠ” 것이 해결법이 될 수 μžˆλ‹€.

  • μ•„λ‹ˆλ©΄ double μžλ£Œν˜•μœΌλ‘œ => 숫자 1κ°œλ‹Ή 64μΉΈ μ‚¬μš©

    • λ©”λͺ¨λ¦¬ μš©λŸ‰μ„ 2배만큼 μ°¨μ§€ν•˜κΈ° λ•Œλ¬Έμ— 단점이 될 수 μžˆμ§€λ§Œ, 정확도가 더 μ€‘μš”ν•œ 경우 μ‚¬μš©

μΆ”κ°€λ‘œ 곡뢀할 λ‚΄μš©

overflow ν˜„μƒ

  • Not a Number
  • Infinity



Reference

https://www.youtube.com/watch?v=-GsrYvZoAdA

profile
Stay Calm

0개의 λŒ“κΈ€