수의 체계
정수
다 알다시피 비트 숫자는 부터 까지 표현가능
실수
단정도 (single)에선 sign 1비트, exponent 8비트, mantissa 23비트
배정도는 (double)에선 sign 1비트, exponent 11비트, mantissa에 52비트
단정도에서
특이하게 exponent가 all 0면 로 계산하고, (c는 e=1일 때의 값)
exponent가 all 1이면 m이 0이면 무한대, 아닐 경우 NaN
머신입실론 (Machine epsilon)
발생할 수 있는 상대오차의 최대치.
mantissa 비트가 1만 변했을 때의 오차다.
즉, 단정도에서 , 배정도에서
중요) 부동소수점 방식은 상대오차가 일정함!! 절대오차는 달라짐 (작은 실수는 절대오차가 작고, 큰 실수는 절대오차가 큼)
오차
마무리오차 (round-off error)
컴퓨터에 수를 반올림해서 저장하느라 발생하는 오차.
특히 덧셈 등 두 수의 연산을 수행할 때 발생하는 마무리오차는 확산 마무리오차라고 하며, 대부분의 경우 이랑 같다.
하지만 크기가 비슷한 두 수를 빼거나 크기가 너무 다른 두 수를 더할 때는 보다 커진다.
c.f. 유효수상실
서로 비슷한 두 수를 빼면 유효숫자가 줄어듦
e.g. a가 1.23456789고 b가 1.23456788이라면 a, b는 유효숫자가 9자리지만 는 유효숫자가 1자리임
해결방안 1) 뺄 때는 식을 변형시켜서 덧셈을 사용
e.g.
해결방안 2) 더할 때는 grouping(N개씩 묶어서 더함) 또는 작은 수 부터 더함
e.g. 는 부터 더하는 것보다 부터 더하는게 훨씬 정확함
절단오차
문제의 해석에서 발생하는 오차.
대표적으로 테일러전개는 당연히 무한개의 항을 전부 더할 수 없는데, 만약 아래 식처럼 3번째 항에서 끊었다면 뒤따르는 나머지 항들이 오차가 됨.
일반적으로 절단오차가 작아지면 마무리오차가 커지기 때문에, 오차가 제일 줄어드는 적당한 선에서 계산해야함.