const result1 = (1.1 + 0.1) == 1.2;
console.log(result1); // false
const result2 = (1.1 + 0.1) >= (0.4 + 0.8);
console.log(result2); // false
컴퓨터는 RAM이라는 메모리 공간에 2진수로 변환하여 저장합니다.
2진법과 10진법의 변환시에 2의 제곱을 통해서 변환을 하는데, 0.125는 1/8이라서 딱 2의 -3승 이지만, 1.1은 실제 저장된 값을 보면 1.100000000X로 표현됩니다.
이런 실제 값과 저정된 값의 차이는 머신입실론
이라고 하는데 1.1의 머신입실론
과 0.1의 머신입실론
의 합이 1.2의 머신입실론
보다 크기 때문에 그렇게 표현됩니다.
즉, 컴퓨터는 소수
를 메모리에 저장 시 2진수로 변환되면서 저장되는데, 변환 시 순환소수
문제가 발생하는 소수에 머신입실론
현상이 생기기 때문에 소수 연산시 정확한 값을 얻으려먼 정수
로 변환하여 연산하거나 반올림
이나 버림
이후에 연산하는 방법을 이용할 수 있습니다.
ref :