logo
Published on

자료구조 for JS : Number

Authors
  • avatar
    Name
    Bora Choi
    Twitter

연산자

+ : addition

- : subtraction

/ : division

* : multiplication

% : modulus

Number System

sign : 음수 양수 표현 1 음수 0 양수

32~23 : 지수값

22~0 : 분수값

소수계산에 있어 부동소수점 방식은 오류를 불러일으킨다.

0.1 + 0.2 === 0.3 //false

JavaScript Number Object

Integer Rounding

부동소수점을 사용하는 자바스크립트에서 나눗셈의 값은 정수가 아니다. 정수 값을 얻기 위해서는 Math 함수를 사용한다.

Math.floor : 내림

Math.round : 반올림

Math.ceil : 올림

Number.EPSILON

표현 할 수 있는 정수 중 가장 작은 수

function numberEquals(x, y) {
  return Math.abs(x - y) < Number.EPSILON
}

numberEquals(0.1 + 0.2, 0.3) //true

부동 소수점으로 인해 실수연산시 발생하는 문제점을 해결할 수 있다.

Maximums

Number.MAX_SAFE_INTEGER은 가장 큰 정수를 반환한다.

Number.MAX_SAFE_INTEGER + 1 === Math.MAX_SAFE_INTEGER + 2 //true

그러나 실수를 연산한 경우에는 작동하지 않는다. Number.MAX_VALUE를 사용하면 해결할 수 있다.

Number.MAX_SAFE_INTEGER + 1.111 === Math.MAX_SAFE_INTEGER + 2.111 //false

Number.MAX_VALUE + 1 === Math.MAX_VALUE + 2 //true
Number.MAX_VALUE + 1.111 === Math.MAX_VALUE + 2.111 //true

Minimums

Number.MIN_SAFE_INTEGER은 가장 작은 정수를 반환한다.

Number.MIN_SAFE_INTEGER - 1 === Math.MIN_SAFE_INTEGER - 2 //true

그러나 실수를 연산한 경우에는 작동하지 않는다. Number.MIN_VALUE를 사용하면 해결할 수 있다.

Number.MIN_SAFE_INTEGER - 1.111 === Math.MIN_SAFE_INTEGER - 2.111 //false

Number.MIN_VALUE > Math.MIN_SAFE_INTEGER //true

Number.MIN_VALUE 는 0에 근접하기 때문에 Numer.MIN_VALUE -1 == -1true이다

Infinity

Number.MAX_VALUE 보다 유일하게 큰수 Infinity

Math.MIN_SAFE_INTEGER 보다 유일하게 작은 수 -Infinity

Size Summary

Infinity <
  Number.MIN_SAFE_INTEGER <
  Number.MIN_VALUE <
  0 <
  Number.MAX_SAFE_IN - TEGER <
  Number.MAX_VALUE <
  Infinity

숫자와 관련된 알고리즘

소수확인하기 Primary Test

function isPrime(n) {
  if (n <= 1) return false

  for (let i = 2; i < n; i++) {
    if (n % i == 0) {
      return false
    }
  }

  return true
}

시간 복잡도 O(n)

function isPrime(n) {
  if (n <= 1) return false
  if (n <= 3) return true

  if (n % 2 === 0 || n % 3 === 0) return false

  for (let i = 5; i * i < n; i = i + 6) {
    if (n % i === 0 || n % (i + 2) === 0) return false
  }

  return true
}

시간 복잡도 O(sqrt n)

소인수 분해 Prime Factorization

function primeFatorization(n) {
  while (n % 2 == 0) {
    console.log(2)
    n = n / 2
  }
  for (let i = 3; i * i < n; i = i + 2) {
    while (n % i === 0) {
      console.log(i)
      n = n / i
    }
  }
  if (n > 2) {
    console.log(n)
  }
}