๐น 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
ํํ๋ก ํ์ฉ ๐
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250225 TIL] n8n ์ด๋?(GPT์ง์) (0) | 2025.02.25 |
---|---|
[250222 TIL] rebase, merge ๋น๊ต (0) | 2025.02.22 |
[250216 TIL] XSS, SQL injection (0) | 2025.02.16 |
[250216 TIL] Duck Typing (0) | 2025.02.16 |
[250215 TIL] XSS, CSRF ๋์ (0) | 2025.02.15 |
๐น 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
ํํ๋ก ํ์ฉ ๐
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250225 TIL] n8n ์ด๋?(GPT์ง์) (0) | 2025.02.25 |
---|---|
[250222 TIL] rebase, merge ๋น๊ต (0) | 2025.02.22 |
[250216 TIL] XSS, SQL injection (0) | 2025.02.16 |
[250216 TIL] Duck Typing (0) | 2025.02.16 |
[250215 TIL] XSS, CSRF ๋์ (0) | 2025.02.15 |