[자바스크립트 ES6+ 기본] 10. Number 오브젝트

IEEE 754

  • 자바스크립트는 IEEE 754에 정의된 64비트 부동 소수점으로 수를 처리 (double-precision floating-point format numbers)
  • 64비트로 최소값과 최대값을 처리
  • 정수와 실수 구분 안함
    • 1을 1.0으로 처리
    • 1 + 1.2 가능

64비트 구성

  • 사인 비트

    • 63: 1비트
    • 값이 0이면 양수, 1이면 음수
  • 지수 (exponent)

    • 52~62: 11비트
  • 가수 (fraction)

    • 0~51: 52비트 + 1(사인 비트): 53비트

Number 상수

  • safe integer란

    • 지수(e)를 사용하지 않고 나타낼 수 있는 값
    • 2의 64승이 아닌 2의 53승
  • Number.MAX_SAFE_INTEGER

    • safe integer 최대값
log(Number.MAX_SAFE_INTEGER);
log(Math.pos(2, 53) - 1);

// 9007199254740991
// 9007199254740991
  • Number.MIN_SAFE_INTEGER
    • safe integer 최소값
log(Number.MIN_SAFE_INTEGER);
log(-(Math.pos(2, 53) - 1));

// -9007199254740991
// -9007199254740991

Number.EPSILON

  • 아주 작은 값
  • 2.220446049250313080847263361816E-16 또는 2^(-52)
  • 사용 사례
  1. 미세한 값 차이 형태 (부동 소수점 처리 때문)
	const total = 0.1 + 0.2;
	log(total);
	log(total === 0.3);

	// 0.3000000000000004
	// false
  1. 미세한 값 차이를 같은 값으로 간주
	const value = Math.abs(0.1 + 0.2 - 0.3);
	log(value < Number.EPSILON);
	
	// true
  1. 0 / 0으로 NaN가 되는 것을 방지
log(0 / 0);
const value = 0 / (0 + Number.EPSILON);
log(value);

// NaN
// 0

진수

  • Binary(2진수)
    • 0b0101, 0B0101 형태로 작성
    • 숫자 0 다음에 b/B 작성하고 이어서 0 또는 1로 값을 작성
const value = 0B111;
log(value);

// 7
  • Octal(8진수)
    • 0O0105 형태로 작성
    • 숫자 0 다음에 영문 o/O 작성하고 이어서 0~7로 값을 작성
    • ES3는 첫 자리에 영문 o/O 작성
const value = 0o111; // 1 + 8 + 64
log(value);

// 73

좋은 웹페이지 즐겨찾기