Skip to content
Snippets Groups Projects
Commit 2f4b31aa authored by NamDoHyun's avatar NamDoHyun
Browse files

multiply and sine

parent 5b968e7b
Branches master
No related tags found
No related merge requests found
File added
//fx_1516_longlong.c file
#include "fx_s1516_longlong.h"
#define FX32_90 0x005A0000
#define FX32_180 0x00B40000
#define FX32_360 0x01680000
// sin table
const fixed32 fx32_SinTable[92] =
{
0,1143,2287,3429,4571,5711,6850,7986,9120,10252,11380,12504,13625,14742,15854,16961,18064,19160,20251,21336,22414,23486,24550,25606,26655, 27696,28729,29752,
30767,31772,32768,33753,34728,35693,36647,37589,38521,39440,40347,41243,42125,42995,43852,44695,45525,46340,47142, 47929,48702,49460,50203,50931,51643,52339,
53019,53683,54331,54963,55577,56175,56755,57319,57864,58393,58903,59395,59870,60326,60763, 61183,61583,61965,62328,62672,62997,63302,63589,63856,64103,64331,
64540,64729,64898,65047,65176,65286,65376,65446,65496,65526,65536,65526
};
fx_s1516_sin(fixed32 fa){
int sign = 1;
fixed32 ret0, diff;
int idx;
if ( fa < 0 )
{
sign = -1;
fa *= -1;
}
fa = fa % FX32_360;
if ( fa >= FX32_180 )
{
sign *= -1;
fa -= FX32_180;
}
if ( fa > FX32_90 )
fa = FX32_180 - fa;
idx = fa>>16;
ret0 = fx32_SinTable[idx];
diff = fx32_SinTable[idx+1]-ret0;
return ( sign *( ret0 + ((diff*(fa&0xFFFF))>>16) ));
}
\ No newline at end of file
#pragma once
typedef long fixed32;
typedef long long fixed64;
#define mul0(a, b) (fixed32) ((fixed64)(a) * (b) >> 16)
#define mul1(a, b) (fixed32) ((a) * (b) >> 16) // no fixed
#define mul2(a, b) (fixed32) ((a>>8) * (b>>8))
#define mul3(a, b) (fixed32) ((a>>10) * (b>>6))
#define mul4(a, b) (fixed32) ((a>>4) * (b>>4) >> 8)
// mul에서 (fixed) conversion 안하면 : 숫자가 -1 부터 1로 (작게)정규화 되어있으면 곱셈이 빠르다.
// fixed도 붙였다 땠다 해보고
// 시프트 연산도 나눠보고
// for 문도 많이 돌려보고
// 값도 아주 작은 거부터 아주 큰거까지 다 넣어보고
\ No newline at end of file
#include "fx_s1516_longlong.h"
#include <stdio.h>
int main()
{
long long a = 3000000;
long long b = 5000000;
printf("mul0 : %d\n", mul1(a, b));
printf("mul1 : %d\n", mul1(a, b));
printf("mul2 : %d\n", mul2(a, b));
printf("mul3 : %d\n", mul3(a, b));
printf("mul4 : %d\n", mul4(a, b));
}
\ No newline at end of file
...@@ -15,7 +15,7 @@ int main() ...@@ -15,7 +15,7 @@ int main()
double fa = fx_to_double(a); double fa = fx_to_double(a);
double fb = fx_to_double(b); double fb = fx_to_double(b);
printf("a : %d b : %d fa : %lf fb : %lf\noriginal a : %lf original b : %lf\n\n", a, b, fa, fb, double_to_fx(fa), double_to_fx(fb)); printf("a : %d b : %d\nfa : %lf fb : %lf\noriginal a : %lf original b : %lf\n\n", a, b, fa, fb, double_to_fx(fa), double_to_fx(fb));
printf("Add : %-15d %lf\n", a + b, fx_s1516_add(fa, fb)); printf("Add : %-15d %lf\n", a + b, fx_s1516_add(fa, fb));
printf("Sub : %-15d %lf\n", a - b, fx_s1516_sub(fa, fb)); printf("Sub : %-15d %lf\n", a - b, fx_s1516_sub(fa, fb));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment