4.5부동소수점
-
Upload
jaehong-park -
Category
Documents
-
view
1.689 -
download
0
Transcript of 4.5부동소수점
4.5 부동 소수점 수
데브루키박재홍 ( 꿈꾸는소 )
목차 4.5 부동 소수점 수 4.6 이진 과학적 기수법 4.7 IEEE 754 부동 소수점 표준 4.8 실무에서의 부동 소수점
4.5 부동 소수점 수 4.5.1 리뷰 : 과학적 기수법과학적 기수법은 다 부분들로 구성됨1. 다음과 같은 가수라고 불리는 정수
2. 지수라고 불리는 정수
지수와 가수가 함께 수를 생성하기 위해서 결합된다 .
1.0≤∨𝑚𝑎𝑛𝑡𝑖𝑠𝑠𝑎∨¿10.0
𝑚𝑎𝑛𝑡𝑖𝑠𝑠𝑎×10𝑒𝑥𝑝𝑜𝑛𝑒𝑛𝑡
4.5 부동 소수점 수 4.5.2 제한된 과학적 기수법과학적 기수법에 대한 규칙들1. 가수는 한자리 , 0 이 아닌 정수로 쓰여야만 한다 .
2. 가수는 소수부 수들의 고정된 개수를 가지고 쓰여야만 한다 .( 이것을 M 이라고 정의 )
3. 지수는 고정된 개수의 수들로 쓰여야만 한다 .( 이것을 E 라고 정의 )
4. 가수와 지수는 각각 개별적인 부호를 가진다 .
예를 들어 M=3, E=2 인 형식
1.1 2 3
=()x(9x)x(2)x(2)=3,600,000
4.5 부동 소수점 수 4.5.2 제한된 과학적 기수법가수의 선두 수는 반드시 0 이 아니어야 한다 .
즉 [1,9] 사이 값에 대해 9 가지 선택이 존재 ,
9x10x10x10=9000
이것이 이 기수법의 범위와 정밀도 둘 모두를 유한하도록 한다 .
최소 , 최대 지수
최대 가수 값
최대 표현 가능한 값 :
최소 표현 가능한 값 :
가장 작은 양의 값 :
± (10𝐸−1 )=± (102−1 )=±9910.0− (10−𝑀 )=10.0− (10− 3 )=10.0−0.001=9.999
4.6 이진 과학적 기수법밑수가 10 이어야 할 이유는 없다 . 2 인 경우를 보자
여기서 Mantissa 는 정규화된 1- 도트 -M 고정 소수점 수Exponent 는 E 비트 정수 , SignM, SignE 는 각각 부호를 표현 할 독립적인 비트
읭 ? 8 비트는 256 개가 아닌가 ?
가수의 선두 비트가 반드시 1 이라는 사실을 기억하자 . 그래서 개수도 반으로 준다 .
SignM X Mantissa X
=()x(1x)x(2)x(2)==128
4.6 이진 과학적 기수법최소 , 최대 지수
최대 가수 값
최대 표현 가능한 값 : = 15
최소 표현 가능한 값 :
가장 작은 양의 값 :
여기 까지는 기본 개념이다 !
± (2𝐸−1 )=± (22−1 )=±3
2.0− (2−𝑀 )=2.0− (2− 3 )=1.875
4.7 IEEE 754 부동 소수점 표준1970 년대 초에서 중기까지 과학자들과 공학자들은 실수 표현을 위해 매우 자주 부동 소수점을 이용하였는데 표준의 부재가 문재를 일으켰다 !
그 것은 컴퓨터의 제조사와 모델에 따라 다른 결과를 생성했기 때문 ! 플랫폼 의존적이었다
4.7 IEEE 754 부동 소수점 표준 4.7.1 기본 표현http://enc.daum.net/dic100/contents.do?query1=10XXX14125
부호 비트는 양수를 나타내고 1 인 부호 비트는 음수를 나타냄
지수 비트는 자체가 값이 아니라 수치에서 bias 값을 빼주어 값을 낸다 . – 예를 들어 설명
가수 비트는 가장 좌측의 값이 2 의 0 제곱 그 다음이 2 의 -1 제곱 그 다음이 2 의 -2 제곱 … 이처럼
32 비트 단정밀도 부동소수점을 기준으로 2 의 -23 제곱 자리까지 표현할 수 있다 .
4.7 IEEE 754 부동 소수점 표준 4.7.2 범위와 정밀도단정밀도 부동 소수점에서 밑수가 2 인 최대 지수가 127 이라는 것을 알았다 .
그렇다면 최대 가수는 ..
최소 , 최대 단정밀도 부동 소수점 값들은 다음과 같다 .
주어진 정규화된 가수와 가장 가까운 이웃 사이의 차이는 이고 임의의 지수 E 가 주어졌다면두 이웃하는 단정밀도 값 사이의 차이는 다음과 같다 .
1.0+= 1.0+1.0 - = 2.0 - 2.0
±(2.0− 1
223 )×2127≈±3.402823466×1038
𝛿 𝑓𝑝=2𝐸×2− 23=2𝐸− 23
4.7 IEEE 754 부동 소수점 표준 4.7.2 범위와 정밀도를 곱해서 의 항으로 |A| 의 경계를 지을 수 있다 .
이 식으로 |A| 를 전체 지수 항 의 근사값으로 대략 구할 수 있다 .
또 주위에 이웃하는 부동 소수점 값 들 사이 거리의 근사값을 구하기 위해 대입할 수 있다 .
절대 오류와 상대 오류
=
AbsError A 𝑅𝑒𝑙𝐸𝑟𝑟𝑜𝑟 𝐴=𝐴𝑏𝑠𝐸𝑟𝑟𝑜𝑟 𝐴
¿ 𝐴∨¿≈|𝐴|
224×|𝐴|= 1224
¿
고정 소수점과 반대의 사실 .. 고정소수점은 절대 오류가 상수이고 상대오류는 표현된 값들에 반비례로 커졌었다 .
4.7 IEEE 754 부동 소수점 표준 4.7.3 산술 연산- 덧셈과 뺄셈기수 점들은 그 것들의 지수가 동일할 경우에만 정렬된다 .
표준 부동 소수점 덧셈 방법은 두 양수 그리고 더하기 위해 이렇게 작동한다 .
1. 만약 필요하다면 이기 위해서 A 와 B 를 교환한다 .
2. - 비트 만큼 오른쪽으로 를 쉬프트한다 . 만약 라면 , 그 때 이 쉬프트된 는 정규화 되어 있지 않을 것인데 는 1.0 보다 작을 것이다 . 기수 점을 정렬하기 위해서 이러한 과정이 필요하다 .
3. 직접 쉬프트된 가수 그리고 를 더해서 를 계산한다 .
4. = 로 설정한다 .
5. 결과 가수 가 정규화 되어 있지 않는 경우라면 , 오른쪽으로 1 비트 만큼 를 쉬프트하고 에 1 을 더한다 .
4.7 IEEE 754 부동 소수점 표준 4.7.3 산술 연산- 곱셈명시적인 부호 비트를 사용하여서 결과의 부호는 부호 비트들의 XOR 를 수행함으로써 간단하게 계산된다 .
부호들이 동일하다면 양의 결과를 그렇지 않다면 음의 결과를 생성한다 .
지수부 지수 정렬 필요없이 지수를 단순히 더하지만 두 지수 모두 127 의 바이어스값을 포함하고 있기 때문에결과는 254 의 바이어스 값을 가지고 있다 . 그래서 127 을 빼야 한다 .
가수부가수끼리도 곱셈을 하게 된다 . 단 결과 가수가 반드시 1.0 보다 커야한다 . 정규화 되어 있지 않는다면지수부에 1,2 를 추가한뒤 1,2 만큼 오른쪽으로 쉬프트 할 수 있다 .
4.7 IEEE 754 부동 소수점 표준 4.7.3 산술 연산반올림 모드4 가지의 반올림 모드가 있다 .
1. 0 으로 반올림2. - 무한대로 반올림3. 무한대로 반올림4. 가장 가까운 값으로 반올림가수를 표현 될 수 있는 M 이라고 부르는 부분과 그 나머지 하위 비트들인 R 이라고 부르는 부분으로분해한다 . 0 으로의 반올림은 또한 버림이라고 하는데 M 은 사용되고 R 은 무시되거나 잘라낸다 .
무한대로의 반올림은 R=0 인지 아닌지로 나뉘게 된다 .
4.7 IEEE 754 부동 소수점 표준 4.7.4 특수한 값1. 0
2. 무한3. 수가 아닌 값들
4.7 IEEE 754 부동 소수점 표준 4.7.5 매우 작은 값정규화된 가수 들과 0 의 구멍
정규화된 가수의 한 가지 부작용은 0 근처에서 흥미롭게 작동 한다는 것이다
최소의 정규화된 값을 살펴보자 (min 으로 정의 )
지수가 -126 인 부분 =
위 값보다 단지 비트 1 만 다른데 최하위 가수 비트가 설정된다 .(next 라고 정의 )
=min
둘 사이의 거리next-min=
Min 의 0 과의 거리가 가장 가까운 이웃의 거리보다 크다 . 라는 것을 알 수 있다 . 정밀도를 표현할 수 없는 0.0 과 min 사이 수들의 커다란 구멍을 남긴다 . 그리고 종종 그것을 0 으로의 플로싱이라고 말한다 .
여기서 문제점을 하나 보자면 서로 다른 수들의 뺄셈이 0 이 될 수 있다는 것이다 . A-B=0 이지만 A 는 B 와 같지않다 .
4.7 IEEE 754 부동 소수점 표준 4.7.5 매우 작은 값디노멀과 점진적인 언더플로우IEEE 명세는 0 의 구멍이라고 불리는 문제를 해결하기 위한 매우 작은 수들에 대한 행위를 상술한다 .
이러한 행위를 점진적인 언더플로우라고 하고 이러한 점진적인 언더플로우는 디노멀 또는 디노멀라이드 수 라고 불리는 값들을 생성한다 .
디노멀에서 지수는 -126 이 된다고 가정되고 가수는 범위 안에 있다 .
명세가 단지 지수가 유효한 최소 지수인 -126 일 때 디노멀라이즈드 가수를 허용함으로써모든 0 이 아닌 부동소수점 값들이 여전히 유일하다는 것을 기억하자 .
[ 1223 ,1− 1
223 ]
4.7 IEEE 754 부동 소수점 표준 4.7.7 배정밀도IEEE 754 명세는 C/C++ 에서 내장 double 형으로 알려진 64 비트 배정밀도 부동 소수점 값을 지원한다 .
비트단위 구조를 가지고 단정밀도 형식과 완전하게 동일하다 .
부호 1 비트 지수 11 비트 가수 52 비트이러한 구조로 배정밀도는 거의 대부분의 범위와 많은 정밀도 논제들에서 해결첵이 있지만 이것도 결점은 있다 .
결점들1.메모리 . 정밀도 값들은 단정밀도 값들의 저장소의 두 배를 요구하고 특히 벡터들의 배열들이 배정밀도로 저장되어야만 할 경우에 어플리케이션에서 요구하는 메모리가 가파르게 증가할 수 있다2. 성능 . 당연히 메모리가 증가하고 범위가 많아져 계산 속도가 엄청 느리다3. 플렛폼 논제들 . 모든 플렛폼이 배정밀도를 지원하는 것은 아니다 .
4.8 실무에서의 부동 소수점 4.8.1 내부 FPU 정밀도Main ()
{
float fdumy =1.0e30f; // 유효한 단정밀도fdumy *= 1.0e38f; // 결과 = 무한fdumy /= 1.0e38f; // 뭥미 ?
}
다음과 같은 상황이 메이저 컴파일러들과 시스템들에서 발생한다 .
1. 초기 할당 이후에 fdumy = 1.0e30 이 될 것이 예상된다 .
2. 곱셈 이후에 fdumy = 무한대가 될 것이 예상된다 .
3. 나눗셈 이후에 fHuge = 1.0e30 이다 !
컴팡일러가 생성하는 기본적인 단계들4. 1.0e30 그리고 1.0e38 을 FPU 로 적재한다 .
5. 적재된 두 값들을 곱하고 무한대로 반환한다 . 그 결과도 마찬가지로 FPU 에서 유지한다 .
6. 이전결과를 1.0e38 로 나누면 , 올바를 결과를 반환한다 .
4.8 실무에서의 부동 소수점 4.8.2 성능간혹 원래 성능보다 20배는 느리게 하는 코드들이 있다 . 그것을 단순히 디노멀의 범위 밖으로 살짝 조절해서 정규화된 부동 소수점 값들로 바꾸었더니 다시 원래 성능으로 돌아왔다 . 하지만 계속 언제까지 그런 수작업을 해야한단 말인가 !
Float TestFunction(float fValue){
return fValue;}Main(){
int I;float fTest;for(i = 0; i<10000; i++)
fTest=TestFunction(1.0e-36f);for(I = 0; i<10000; i++)
fTest=TestFunction(1.0e-40f);}
4.8 실무에서의 부동 소수점- 소프트웨어 부동 소수점 애뮬레이션애플리케이션들은 새로운 플랫폼이 하드웨어 지원 부동 소수점을 제공하는지 아닌지를 판별하기위해서매우 주의 깊게 살펴본다 .
코드를 이식하고 재작성 없이 실행하는 것을 만족 하기 위해서 ..
=>왠지 노가다 같은 작업
모든 FPU 들이 단정밀도와 배정밀도를 지원하지 않는다는 것을 상기하는 것도 가치가 있다 .
예를 들어 몇몇 주요 게임콘솔들은 단정밀도 코드에 대해서 FPU 코드를 생성하고 배정밀도 값들에대해서는 애뮬레이션 코드를 생성 할 것이다 .
결국 배정밀도의 부주의한 사용은 매우 느린 코드를 야기시킨다 .
4.8 실무에서의 부동 소수점 4.8.3 IEEE 명세에 대한 순응과거 보다는 아니지만 현재 최신 CPU 들도 모든 부동소수점 장치들이 항상 완벽히 IEEE 명세에 따르면서단정밀도와 배정밀도 모두를 지원한다고 생각하는 것은 안전하다는 의미는 아니다 .
인텔의 SSE
128 비트 레지스터에 함축된 네 개의 부동 소수점 값들에 병렬로 수학 연산들을 실행 할 수 있는 특별한 벡터 프로세서이다 .
특수한 목적의 FPU 장점에 관련된 여러 설계결정들을 나열한다 .
1. 초기 SSE 명령어들은 단지 32 비트 부동 소수점 값들만 지원 할 수 있다 .
2. 디노멀 값들은 점진적인 언더플로우를 비활성화하도록 0 으로 반올림 될 수 있다 .
3. 완전한 IEEE 754 동작은 선택 사항으로 제공될 수 있지만 최대 성능보다 반 이하로 떨어진다 .
3D 특화 FPU
4. 연산수로 무한대 또는 NaN 을 허용하지 않는다 .
5. 무한대가 아닌 최대 정규 부동 소수점 값은 오버플로우를 발생한다 .
6. 0 으로의 플로시는 단지 언더 플로우의 한가지 형태이다 .
7. 부동 소수점 예외들에 대한 지원은 없다 .
들어주셔서 감사합니다 ~!!- 끄 읏 -