์ด๊ฒ์ด ๋ญ๋ํ๋ฉด ํ์ดํฌ 3 ์์ค์ฝ๋์ ์๋ ํจ์๋ค
์ ํํ๋ ๋ฅผ ๊ณ์ฐํ๋ ํจ์์ธ๋ฐ, ๊ด์ ํจ๊ณผ์ ์ฐ์ด๋ ํจ์๋ผ์ ๊ต์ฅํ ๋นจ๋ผ์ผ ํ๋ค
(๋น์ ๋ฐ์ฌ ๊ณ์ฐํ๋ ๋ฐ ์ฐ๋๋ฐ, ๋จ์๋ฒกํฐ๊ฐ ์ด์ฉ๊ตฌ ๋ฐ์ฌ๋ฒกํฐ๊ฐ ์ ์ฉ๊ตฌ ํ๋ ๊ฑด ์๋ต)
์ค์ํ ๊ฑด ๋๋ฆฌ๋ฉด 60 ํ๋ ์์ ๋ชป๋ง์ถ๊ณ , ๋นจ๋ผ๋ ๊ฐ์ ์ ํํ์ง ์์ผ๋ฉด ๋น์ด ์ด์ํ๊ฒ ํํ๋๋ค
๋๋์ ์ด๋ ์ ๊ณฑ๊ทผ์ ์ฐ๋ ๋ฐฉ๋ฒ์ ์ ํํ ๋์ ๋ฆฌ์์ค๋ ๋ง์ด ํ์ํ๊ณ ์ค๋ ๋๋ ค์ 60ํ๋ ์์ ๋ชป๋ง์ถ๋ค
๊ทธ๋์ ํ์ดํฌ 3 ๊ฐ๋ฐ์ง์ ์ ๋ฐ ํจ์๋ฅผ ๋ง๋ค์ด ๋ฅผ ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ๊ณ์ฐํ๋ค
์ผ๋จ ๋ณด๋ฉด ์ฃผ์์ ์๋๋ป์ด๋ผ๊ณ ์ ํ ๊ฒ์ฒ๋ผ ์จ1๋ฐ ์ด๊ฒ ๋ญ์ผ ์ด์บ ํ๋๊ฑด๋ฐ ์ถ์ด์ง๋ค
๊ทธ๋๋ ํ๋ ํ๋ ๋ฏ์ด๋ณด๋ฉด ์ดํด๊ฐ ๋๊ธด ๋๋ค
์ฐ์ ๋งจ ์์ ๋ณ์์ ์๋ฃํ ๋ ๊ฐ๊ฐ ๋์จ๋ค
long์ ์ซ์๋ฅผ ์ด์ง๋ฒ์ผ๋ก 00000000 00000000 00000000 00000000์ผ๋ก ํ์ํ๋ค
longํ์์ ํน๋ณํ ๋ด์ผํ ๊ฑด ์์ผ๋ ๋์ด๊ฐ์
float์ ์์ซ์ ์ ํฌํจํ ์ค์๋ฅผ 0 00000000 00000000000000000000000์ผ๋ก ํํํ๋ค
์ฒซ ์๋ฆฌ๋ ๋ถํธ๋ฅผ ๋ํ๋ธ๋ค
0์ด๋ฉด ์์ ๋๋ 0, 1์ด๋ฉด ์์๋ฅผ ๋ปํ๋ค
๋ค์ 8์๋ฆฌ๋ ์ง์(2E)๋ฅผ ๋ํ๋ธ๋ค
E = -127๋ฅผ 00000000์ผ๋ก ํ๊ณ E = +128์ 11111111๋ก ์ฌ์ฉํ๋ค
๋ง์ง๋ง 23์๋ฆฌ๋ ๊ฐ์๋ถ(M)๋ฅผ ๋ํ๋ธ๋ค
์ด์ง๋ฒ์ผ๋ก 1.00000000000000000000000๋ถํฐ 1.11111111111111111111111๊น์ง ์์ซ์ ์ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉํ๋ค
floatํ์ ์์์ผ๋ก ํํํ๋ฉด ์ด๋ฐ ๊ผด์ด ๋๋ค
์ ์์์ 2์ ๋ก๊ทธ๋ก ๊ฐ์ธ๊ณ ์ ๋ฆฌํ๋ฉด
๊ฐ ๋๋ค
๋ฌ๊ธ์์ด ๋์จ ๋ฎค(ฮผ)๋ log2์ ๊ทผ์ฌ๊ฐ์ ๊ตฌํ๋ ๋ฐ ์ฐ์ธ ์ซ์๋ค
1๋ณด๋ค ์์ x์ ๋ํด
์ธ๋ฐ ์ ๋นํ ์๋ฅผ ๋ํ๋ฉด
์ ๋ฐ์ ์ธ ์ ํ๋๋ฅผ ๋์ผ ์ ์๋ค
์คํ์ ์ผ๋ก ์ฐพ์๋ธ ์ ์ ํ ๊ฐ์ ฮผโ0.0430357์ด๋ค
๊ทธ๋ฐ๋ฐ floatํ์ ๋นํธ๊ฐ์ E*223 + M ๊ผด์ ํํ๊ฐ ๋๋ ๊ฒ์ ์๊ณ ์๋ค
(์ฌ๊ธฐ์ ์์๋ ์๊ฐํ์ง ์๋๋ค)
์์์ ๊ตฌํ ๋ก๊ทธ๊ฐ์ด๋ ๋น๊ตํ์ฌ ์๊ฐํด๋ณด๋ฉด floatํ์ ๋นํธ๊ฐ์ ๊ทธ๋๋ก ํ๋์ ์ ์๋ก ์๊ฐํ๋ฉด ์ด ์ ์๋ ์๋ ๊ฐ์ log2๋ฅผ ์ทจํ ๊ฒ๊ณผ ๊ฐ๋ค๊ณ ์๊ฐํ ์ ์๋ค
๋ณ์ ์ ์ ๋ค์ ๋์ค๋ i = * ( long * ) &y; ๊ฐ ๋ฐ๋ก floatํ์ผ๋ก ๋ฐ์ ๋นํธ๊ฐ์ ๊ทธ๋๋ก ์ซ์๋ก ๋ฐ๋ ์ค์ธ ๊ฒ์ด๋ค
์ด์ฐ์ ์ฐํ์ฌ ์ค๊ฐ๊น์ง๋ ์๋๋ฐ ๊ทธ ๋ค์ ์ค์ด ๋ฌธ์ ๋ค
์์์๊ณ
๋ฅผ ๊ตฌํด์ผ ํ๋๋ฐ, ๋ก๊ทธ์ ํน์ฑ์ ๋ฐ๋ผ
๊ฐ ๋๋ค!
๊ทธ๋ฆฌ๊ณ ์ด์ง์์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋นํธ๋ฅผ ์ด๋(bit shift)ํ๋ฉด 2๋ก ๋๋ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ป๋๋ค
์๋ฅผ ๋ค์ด 110(10์ง๋ฒ์ผ๋ก 6)์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋นํธ ์ด๋์ํค๋ฉด 11(10์ง๋ฒ์ผ๋ก 3)์ด ๋๋ค
111(10์ง๋ฒ์ผ๋ก 7)๋ 11(10์ง๋ฒ์ผ๋ก 3)์ด ๋๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ์ด์ฉ ์ ์์ด ๋ฐ์๋ค์ฌ์ผ ํ๋ค
์ค๋ฅธ์ชฝ์ผ๋ก ๋นํธ ์ด๋์ด >>๋๊น -0.5i๋ -(i >> 1)์ด ๋๋ค
๊ทธ๋ฌ๋ฉด ์ 0x5f3759df(=1597463040)๋ ๋์ฒด ๋ญ ์์ผ๊น?
์ค์ ๋ก ๊ตฌํด์ผ ํ๋ ํด๋ฅผ ๊ฐ๋ง(ฮ)๋ผ๊ณ ํ๋ฉด i์ ฮ์ ๊ด๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค
์ด๊ฑธ ์ข์ ์ ๋ดค๋๊ผด๋ก ํํํ๋ฉด,
์ ๋ฆฌํ๋ฉด,
๊ฐ์ ๊ณ์ฐํ๋ฉด, 3/2 * 223 * (127-ฮผ) = 1597488309.57 โ1597463040 = 0x5f3759df
๊ทธ๋ ๋ค, ์ค์ฐจ๋ฅผ ๋ณด์ ํ๋ ๊ฐ์ด ๋ฐ๋ก ์ 0x5f3759df์๋ ๊ฑฐ๋ค!
๊ฐ์ ๋ค ๊ตฌํ์ผ๋ ๊ตฌํ ๊ฐ์ floatํ์ผ๋ก ๋๋๋ฆฌ๊ณ โ y = * (float *) &i;
f(x) = 0์ ์ ํํ๊ฒ ๊ตฌํ ๋ ์ฐ๋ ๋ดํด-๋ฉ์จ๋ฒ์ ์ด์ฉํด ์ ํ๋๋ฅผ ๋์ฌ์ฃผ๋ฉด โ y = y * (threehalfs - (x2 * y * y));
๊ทธ๋ฆฌํ์ฌ ๋๋์
๋, ์ ๊ณฑ๊ทผ ๊ณ์ฐ๋ ์์ด ํฌ์ธํธ ์ฐธ์กฐ, ๋นํธ ์ด๋, ๋บ์
, ๊ทธ๋ฆฌ๊ณ ๊ณฑํ๊ธฐ๋ง ๊ฐ์ง๊ณ ๋น ๋ฅด๊ณ ๋น๊ต์ ์ ํํ๊ฒ๋ฅผ ๊ตฌํ ์ ์์๋ค!
https://youtu.be/p8u_k2LIZyo
๋ญ ์๋ฆฐ์ง ๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค
์จ์๋์
์ด๋ฏธ ๋ณธ ๊ฑฐ์ผ
์๋์ฑ์ด๋ก ์ด ๋ ์ฌ์ด๊ฑฐ์๋๋
'ํ๋ก๊ทธ๋๋จธ'
์ง์ง ์ปดํจํฐ ๊ณผํ์ ๋์ฅ์ด๋ค
๊ฐ์ด์ด ์ ์ฅํด์ง๋ค
์ด๊ฒ๊ทธ ๊ณ ์์ ๊ณฑ๊ทผ ๊ทธ๊ฑด๊ฐ
์ ๋๋ ์ฝ๋์๋ ๊ฒ์ด๋ค....
์ผ์์ ๋จธ๋ฆฌ๊ฐ ํฐ์ ธ๋ฒ๋ ค
์ ๋ฐ ์ ๋ค ์ข ๋ฐ๋ ค๋ค ์ฐ๊ณ ์ถ๋ค ใ ใ ใ ใ
ในใ ์ฝ๋ฉ ์กด๋์ํ๋ค