- Published on
자료구조 for JS : Number
- Authors
- Name
- Bora Choi
연산자
+
: 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 == -1
는 true
이다
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)
}
}