프론트엔드 첫걸음

0.1 + 0.2 !== 0.3 는 true 본문

개발 공부/CS

0.1 + 0.2 !== 0.3 는 true

차정 2023. 2. 26. 18:42

https://www.youtube.com/watch?v=ZQDsWySjY6g 

아 웃겨 눈물났네 ㅋㅋ

 

컴퓨터는 이진법으로 숫자를 처리하는데, 이 방식으로는 모든 숫자를 정확하게 표현하지 못한다.

1/3 이를 십진법으로 나타내면 0.3333333333333333333...으로 나타내나 끝없이 나타낼수없으며, 이를 끊어서 쓰는 순간 오차가 생김
이처럼 이진법도 오차가 나옴.
이진법에서는 0.1이 무한소수가 됨.

컴퓨터는 메모리를 가장 효율적으로 활용할 수 있는 방식으로 데이터를 저장한다.
프로그래밍에서 사용되는 숫자자료형으로 대표적으로 int가 있고, 자바에서는 작은 범위의 숫자를 나타내기 위해 byte를 사용한다.
두번째로 자바의 float, 자바스크립트의 number가 있다.

부동소수점 = floating point 소수점이 떠서 움직인다는 뜻.
실수를 표현하기 위해 32비트의 절반을 각각 정수와 소수에 할당하는 고정소수점 방식은 정수 및 소수부분을 각각 유연하게 나타내기 어렵다. 비트가 효율적으로 쓰이지 못한다.
부동소수점 방식은 모든 숫자를 1.XXXX 방식으로 표현한다.

음수인지 양수인지 / 소수점이 몇칸 움직일지 / 소수점 뒤로 오는 부분 

효율적으로 다양한 숫자 표현가능 = IEEE754표준

 

오차 없는 계산이 필요할 때는
Java에서는 bigDecimal, javascript는 'big.js', python에서는 decimal 사용하면 된다.