๐น Number.EPSILON ์ด๋?
Number.EPSILON์ JavaScript์์ ๋ถ๋์์์ ์ฐ์ฐ์ ์ค์ฐจ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์์์
๋๋ค.
์ด ๊ฐ์ 1๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ถ๋์์์ ์ซ์ ์ฌ์ด์ ์ฐจ์ด๋ฅผ ๋ํ๋ด๋ฉฐ, 2^(-52) (์ฝ 2.220446049250313e-16)์ ๊ฐ์ ๊ฐ์ง๋๋ค.
console.log(Number.EPSILON); // 2.220446049250313e-16
๐น ์ ํ์ํ๊ฐ?
JavaScript์์ ์ซ์๋ IEEE 754 ๋ถ๋์์์ ๋ฐฉ์์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
์ด ๋๋ฌธ์ ์ ํํ ์ค์ ์ฐ์ฐ์ด ์ด๋ ค์ ๋ฏธ์ธํ ์ค์ฐจ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
โ ๋ถ๋์์์ ์ค์ฐจ ์์
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.3 === (0.1 + 0.2)); // false (์์๊ณผ ๋ค๋ฆ)
์์ฒ๋ผ 0.1 + 0.2๊ฐ ์ ํํ 0.3์ด ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๐น Number.EPSILON์ ํ์ฉํ ์ค์ฐจ ๋ณด์
์ด๋ฐ ์ค์ฐจ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Number.EPSILON์ ์ฌ์ฉํ์ฌ ๋น๊ตํ ์ ์์ต๋๋ค.
function isEqual(a, b) {
return Math.abs(a - b) < Number.EPSILON;
}
console.log(isEqual(0.1 + 0.2, 0.3)); // true
Math.abs(a - b) < Number.EPSILON→ ๋ ์์ ์ฐจ์ด๊ฐ ๋งค์ฐ ์์ผ๋ฉด ๊ฐ์ ๊ฐ์ผ๋ก ๊ฐ์ฃผ
๐น ์ ๋ฆฌ
โ
Number.EPSILON์ ๋ถ๋์์์ ์ค์ฐจ๋ฅผ ํด๊ฒฐํ ๋ ์ฌ์ฉ
โ
0.1 + 0.2 !== 0.3 ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ค์ฐจ ๋ณด์ ๊ธฐ์ค
โ
๋น๊ต ์ Math.abs(a - b) < Number.EPSILON ํํ๋ก ํ์ฉ ๐
'javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [250719 TIL] bcrypt ๊ธฐ๋ณธ (0) | 2025.07.19 |
|---|---|
| ์๋ฐ์คํฌ๋ฆฝํธ์ ์งง์? ์ญ์ฌ ์ ๋ฆฌ (0) | 2025.02.16 |
| [241115 TIL] abstract, implements (2) | 2024.11.15 |
| [241106 TIL] Math.sin, cos, tan (0) | 2024.11.06 |
| [240930 TIL] ๋น๋๊ธฐ, ์ด๋ฒคํธ๋ฃจํ, ํ (2) | 2024.10.02 |