diff --git a/README.md b/README.md index f75b8faa0e79732edc8892d21d1b24e9ba4c2c1c..d5e7add94f7882241d4372264f159f49e6a9ddd7 100644 --- a/README.md +++ b/README.md @@ -168,44 +168,44 @@ ### 1. Type conversion -- **longlong_to_fx** +- **fx_s1516 longlong_to_fx(long long a)** - long long 형 변수를 fx_s1516형으로 형 변환 -- **fx_to_longlong** +- **long long fx_to_longlong(fx_s1516 a)** - fx_s1516형 변수를 long long 형으로 형 변환 ### 2. Multiplication -- **fx_s1516_longlong_mul0** +- **fx_s1516_longlong_mul0(fx_s1516 a, fx_s1516 b)** - 두 수 a, b를 받아 a를 fixed64(long long)으로 형 변환 한 후 b와 곱하여 16 만큼 오른쪽으로 shift하여 연산한다. -- **fx_s1516_longlong_mul1** +- **fx_s1516_longlong_mul1(fx_s1516 a, fx_s1516 b)** - 두 수 a, b를 받아 먼저 a와 b를 곱한 뒤 소수부의 크기 즉, 16 만큼 오른쪽으로 shift 연산한다. a, b가 큰 수일 경우 overflow가 발생할 수 있다. -- **fx_s1516_longlong_mul2** +- **fx_s1516_longlong_mul2(fx_s1516 a, fx_s1516 b)** - 두 수 a, b를 받아 a와 b 각각 오른쪽으로 8 만큼 shift연산한 뒤 곱한다. - mul1과 달리 overflow의 위험은 줄지만 작은 수의 경우에는 shift 연산에 의해 underflow가 발생활 확률이 있으므로 정확도가 낮아진다. -- **fx_s1516_longlong_mul3** +- **fx_s1516_longlong_mul3(fx_s1516 a, fx_s1516 b)** - 두 수 a, b를 받아 a는 10만큼, b는 6 만큼 오른쪽으로 shift연산한 뒤 곱한다. - mul2와 비슷하지만 a를 더 많이 shift하므로 a에서 underflow가 발생할 확률이 높고 비교적 정확도가 떨어진다. - a와 b중 큰 수가 왼쪽에 있을 때 그 반대보다 더 정확한 연산을 한다. -- **fx_s1516_longlong_mul4** +- **fx_s1516_longlong_mul4(fx_s1516 a, fx_s1516 b)** - 두 수 a, b를 받아 a와 b 각각 오른쪽으로 4 만큼 shift연산하여 곱한 후 다시 오른쪽으로 8만큼 shift연산한다. - a와 b를 그대로 곱하지 않고 4비트씩 shift하여 overflow 확률을 낮추면서 4 비트씩 밖에 shift하지 않으므로 underflow가 발생할 확률도 낮은 방법이다. ### 3. Division -- **fx_s1516_longlong_div0** +- **fx_s1516_longlong_div0(fx_s1516 a, fx_s1516 b)** - 두 수 중에서 나누어 지는 수 a를 fixed64(long long)으로 캐스팅 한 후 소수부 크기 16만큼 왼쪽으로 shift 연산을 하고난 후 나누는 수 b로 나누어 연산한다. - a, b가 비슷한 범위의 숫자이거나 실수형 계산 시 소수점이 나오는 경우 오차범위가 커지므로 그것을 방지하는 방법이다. - 캐스팅 작업이 있어 다른 함수보다 비교적 속도가 느리다. -- **fx_s1516_longlong_div1** +- **fx_s1516_longlong_div1(fx_s1516 a, fx_s1516 b)** - div0과 다르게 별도의 캐스팅 없이 나누어지는 수 a를 8비트 왼쪽으로 shift한 후 나누는 수 b로 나누어 다시 왼쪽으로 8비트 shift 하여 연산한다. - 캐스팅 작업이 없으므로 속도가 비교적 빠르며 a가 큰 수일 경우 overflow의 가능성이 있다. -- **fx_s1516_longlong_div2** +- **fx_s1516_longlong_div2(fx_s1516 a, fx_s1516 b)** - 앞의 두 함수와 다르게 나누는 수 b를 오른쪽으로 16비트 shift한 후 나누어지는 수 a를 나누어 연산한다. - div1과 마찬가지로 캐스팅이 없어서 비교적 연산 속도가 빠르며 overflow 발생 확률은 작지만 b가 작은 수일 경우 underflow가 발생할 수 있다. ### 4. Exponent -- **fx_s1516_longlong_sin** +- **fx_s1516_longlong_sin(fx_s1516 fa)** - Sin Table @@ -226,6 +226,10 @@ - sin함수는 180 ~ 360 사이에서는 음수이기 때문에 fa를 미리 define해 둔 FX32_180과 비교하여 그것보다 크거나 같다면 부호를 반전하고 fa에서 그 값을 빼준다. - 이후 미리 구해둔 sin table을 이용하여 ret0과 diff를 구한 후 shift연산하여 sin 값을 계산한다. + +- **fx_s1516_longlong_sqrt(fx_s1516 fa)** + + - sin과 마찬가지로 sqrt 테이블을 정의한 후, table을 이용하여 sqrt 값을 계산한다. ## Functions Accuracy Comparison