Number - 64비트 부동소수점
2023. 3. 28. 14:02ㆍJavascript/TCP school
다음과 같이 동일하게 정리하였다.
아래의 주석을 확인하길 바란다.
<!DOCTYPE html>
<html>
<head>
<title>Document</title>
</head>
<body>
<script>
let x = 0.1 + 0.2;
console.log(x); // 0.30000000000000004
// 64 비트 부동 소수점
console.log(1/2); // 0.5
console.log(2/3); // 0.6666666666666666
console.log(1/10); // 0.1
console.log((0.1).toString()); // 0.1
console.log((0.1).toString(2)); // 0.0001100110011001100110011001100110011001100110011001101
// 64 비트를 넘어가는 경우가 있다 >> 그럼 저장이 안되는 경우도 있다는 것
// 52비트가 넘어가는 경우 반올림이 되어, 같은 값이 되지 못한다
// 그래서 이를 잘 고려해서 다른 방법들을 쓰던지 해야한다!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 1비트 - 양수 0, 음수 1
// 11비트 - 지수부 - 2^(n-1) - 1 + m, (n은 ~ 비트(11), m은 1이 되기위해 얼마나 옮겼는가(4) - 오른쪽은 + 왼쪽은 -))
// 52비트 - 가수부
// 11비트일 경우
// 2^(n-1) - 1 + m
// n = 11, m = 4
// 2^(11-1) - 1 + 4 = 1019
console.log((1019).toString(2)); // 1111111011 >> 지수부에서 11자리라 하였기 때문에 지금은 10자리기에 0을 붙여서 생각하면 됨 01111111011
// 양수였으니까 0을 맨 처음에 넣으면 됨
// 지수부는 01111111011 넣어주고
// 13부터 넣으면 되는데 0.0001100110011001100110011001100110011001100110011001101 니까
// 0.0001는 사용했으니까
console.log((0.1).toString(2)); // 0.0001100110011001100110011001100110011001100110011001101
console.log((1019).toString(2)); // 1111111011
console.log((0.2).toString(2)); // 0.001100110011001100110011001100110011001100110011001101
// 1비트 - 0
// 11비트 - 2^(11-1) - 1 - 3 = 1020
console.log((1020).toString(2)); // 1111111100 >> 10개라서 11개로 0 추가 >> 01111111100
console.log("0.1",(0.1).toString(2));
console.log("0.2",(0.2).toString(2));
// 0.2 : 0.001100110011001100110011001100110011001100110011001101
// 0.1 : 0.0001100110011001100110011001100110011001100110011001101
// ......100111 >> plused라고 지칭하자
// 위 처럼 뒤에서부터 다 더하면 된다
// 이를 다시 parseInt로 바꿔보면 오차가 나타나게 된다.
// console.log(parseInt('........100111').Math.pow(2,-55)); // 0.3000000000000~4 라고 나오게 된다
// 아래의 라이브러리를 사용하면된다!
// BigNumber.js
// Big.js
// Decimal.js
let x2 = 9999999999999999;
// 9007199254740991 >> 이것이 최대 값인데, 이를 넘었기 때문에 아래와 같이 다른 수를 뱉어낸다.
console.log(x2); // 10000000000000000 전혀 다른 값을 출력해 낸다.
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
</script>
</body>
</html>
'Javascript > TCP school' 카테고리의 다른 글
RegExp 객체 (0) | 2023.01.20 |
---|---|
정규 표현식의 응용 (0) | 2023.01.20 |
Strict 모드 (0) | 2023.01.19 |
예외 처리 (0) | 2023.01.18 |
이벤트 리스너 호출 (0) | 2023.01.18 |