자바스크립트 숫자 체계

Jaemin Jung·2021년 7월 24일
0

JavaScript

목록 보기
9/14
post-thumbnail

이해한대로 작성함(틀릴 가능성 큼)

숫자 체계

자바스크립트에서 숫자를 표현할 때 64비트 부동 소수점 표현을 사용한다. 부호 비트(63번째 비트)가 1이면 해당 숫자가 음수다. 다음 여덟개의 비트(63번째부터 52번째 비트)는 지수 값 e를 나타낸다. 마지막으로 나머지 52비트가 분수 값을 나타낸다.

안전 최소, 최대값 설정 이유

자바스크립트에서 알고리즘 문제를 풀때나, 어떠한 연산을 하는 코드가 있을때,
연산하는 숫자가 자바스크립트에서 원활히 표현 가능한 숫자의 범위를 넘을때에,
스택 오버 플로우나 오류가 발생할 가능성이 있다.

이 경우를 대비해서 Number 생성자에는 MIN_SAFE_INTEGER, MAX_SAFE_INTEGER가 존재하며,

이를 통해서 안전 범위를 벗어나면 커트하는식으로 사용한다.

Number

일단 Number에 관해 mdn 공식문서에 의하면,

The Number constructor contains constants and methods for working with numbers.

Number 생성자는 숫자들을 이용할 수 있는 상수와 메소드를 포함한다.라고 되어있다.

또한, Number.MIN_SAFE_INTEGER mdn 공식문서에 의하면,

MIN_SAFE_INTEGER is a static property of Number.

MIN_SAFE_INTEGER는 Number의 정적 속성이라고 나와있다.
따라서 Number.MIN_SAFE_INTEGER는 Number의 메소드가 아닌
Number의 상수라고 볼 수 있다.

실사용

toy 알고리즘 문제

LSCS: 주어진 배열의 연속된 부분 배열*의 합을 구한다고 할 때, 이 중 가장 큰 값(Largest Sum of Contiguous Subarray)
연속된 부분 배열들: 배열 [1,2,3]의 연속 부분 배열은 [1], [1, 2], [1, 2, 3], [2], [2, 3], [3] 입니다.

// dynamic programming: O(N)
const LSCS = function (arr) {
  let subArrSum = 0; // 연속 배열의 합
  let max = Number.MIN_SAFE_INTEGER; // 안전범위 설정후 정답의 후보를 저장
  for (let i = 0; i < arr.length; i++) {
    subArrSum = subArrSum + arr[i];
    if (subArrSum > max) max = subArrSum;

    // 연속된 구간의 합이 음수인 경우,
    // 해당 부분은 버리고 다시 시작해도 된다.
    if (subArrSum < 0) {
      subArrSum = 0;
    }
  }

  return max;
};
profile
내가 보려고 쓰는 블로그

0개의 댓글