Skip to content
Snippets Groups Projects
Commit 0c338494 authored by Choi Jinyoung's avatar Choi Jinyoung
Browse files

Merge branch 'longlong' into 'master'

add long long

See merge request !5
parents c7698e54 caa50319
No related branches found
No related tags found
1 merge request!5add long long
#pragma once
typedef double fx_s2308;
typedef int fx_s2308;
#define FX_TO_DOUBLE(a) ((double) (a/(256.0)))
#define FX_TO_FLOAT(a) ((float) (a/(256.0)))
#define FX_TO_INT(a) ((int) (a/(256.0)))
#define FX_TO_SHORT(a) ((short) (a/(256.0)))
#define DOUBLE_TO_FX(a) (((double)(a*(256.0))))
#define DOUBLE_TO_FX(a) (((int)(a*(256.0))))
#define FX_ADD(a,b) ((a)+(b))
#define FX_SUB(a,b) ((a)-(b))
#define FX_MUL(a,b) DOUBLE_TO_FX(FX_TO_DOUBLE(a)*FX_TO_DOUBLE(b))
......
#include "fx_s2308_longlong.h"
typedef int fx_s2308 ;
const fx_s2308 fx_s2308_SinTable[92] =
{
0,4,8,13,17,22,26,31,35,40,
44,48,53,57,61,66,70,74,79,83,
87,91,95,100,104,108,112,116,120,124,
128,131,135,139,143,146,150,154,157,161,
164,167,171,174,177,181,184,187,190,193,
196,198,201,204,207,209,212,214,217,219,
221,223,226,228,230,232,233,235,237,238,
240,242,243,244,246,247,248,249,250,251,
252,252,253,254,254,255,255,255,255,255,256,255
};
fx_s2308 fx_s2308_sine(fx_s2308 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>>8;
ret0 = fx_s2308_SinTable[idx];
diff = fx_s2308_SinTable[idx+1]-ret0;
return ( sign *( ret0 + ((diff*(fa&0xFFFF))>>8)));
}
#define FX32_90 0x00005A00
#define FX32_180 0x0000B400
#define FX32_360 0x00016800
#define fx_2308_l_mul(a,b) (int)(((long long)(a)*(b)) >> 8)
#define fx_2308_l_mul2(a,b) (int)(((long long)(a>>4)*(b>>4)))
#define fx_2308_l_mul3(a,b) (int)(((a)*(b)) >> 8)
#define fx_2308_l_mul4(a,b) (int)(((a>>4)*(b>>4)))
#define fx_s2308_l_div1 (int)((long long)(a)/(b))
#define fx_s2308_l_div2 (int)((a<<8)/(b))
typedef int fx_s2308;
typedef long fixed32;
fx_s2308 fx32_sind(fx_s2308 fa);
#include <stdio.h>
#include "fx_s2308_double.h"
#include "fx_s2308_longlong.h"
int main() {
fx_s2308 a = 2000;
fx_s2308 b = 1000;
printf("\n===Calculation: Addition===\n");
printf("%f + %f = %f\n",a,b,FX_ADD(a,b));
printf("%d + %d = %d\n",a,b,FX_ADD(a,b));
printf("\n===Calculation: Subtraction===\n");
printf("%f - %lf = %f\n",a,b,FX_SUB(a,b));
printf("%d - %d = %d\n",a,b,FX_SUB(a,b));
printf("\n===Calculation: Multiplication===\n");
printf("%f * %lf = %f\n",a,b,FX_MUL(a,b));
printf("%d * %d = %d\n",a,b,FX_MUL(a,b));
printf("\n===Calculation: Division===\n");
printf("%f / %lf = %f\n",a,b,FX_DIV(a,b));
printf("%d / %d = %d\n",a,b,FX_DIV(a,b));
printf("\n===Function: Sine===\n");
double a1=30.0;
fx_s2308 f_a1=DOUBLE_TO_FX(a1);
fx_s2308 sine_a1=fx_s2308_double_sine(f_a1);
printf("sine(%lf)의 fx_2308 값: %lf, Double로 변환: %lf\n",a1,f_a1,FX_TO_DOUBLE(sine_a1));
printf("sine(%f)의 fx_2308 값: %d, Double로 변환: %lf\n",a1,f_a1,FX_TO_DOUBLE(sine_a1));
printf("\n===Function: Sqrt===\n");
double a2=100.0;
fx_s2308 f_a2=DOUBLE_TO_FX(a2);
fx_s2308 sqrt_a2=fx_s2308_double_sqrt(f_a2);
printf("sqrt(%lf)의 fx_2308 값: %lf, Double로 변환: %lf\n",a2,f_a2,FX_TO_DOUBLE(sqrt_a2));
printf("sqrt(%f)의 fx_2308 값: %d Double로 변환: %lf\n",a2,f_a2,FX_TO_DOUBLE(sqrt_a2));
printf("\n===Function: Power===\n");
double a3=64.0;
fx_s2308 f_a3=DOUBLE_TO_FX(a3);
fx_s2308 pow_a3=fx_s2308_double_pow(f_a3,2.0);
printf("%lf의 2.0 제곱의 fx_2308 값: %lf, Double로 변환: %lf\n",a3,f_a3,FX_TO_DOUBLE(pow_a3));
printf("%f의 2.0 제곱의 fx_2308 값: %d, Double로 변환: %lf\n",a3,f_a3,FX_TO_DOUBLE(pow_a3));
printf("\n===Conversion: fx to double===\n");
printf("fx_s2308 %lf is changed into double %lf\n", a, FX_TO_DOUBLE(a));
printf("fx_s2308 %d is changed into double %lf\n", a, FX_TO_DOUBLE(a));
printf("\n===Conversion: fx to float===\n");
printf("fx_s2308 %lf is changed into float %f\n", a, FX_TO_FLOAT(a));
printf("fx_s2308 %d is changed into float %f\n", a, FX_TO_FLOAT(a));
printf("\n===Conversion: fx to int===\n");
printf("fx_s2308 %lf is changed into double %d\n", a, FX_TO_INT(a));
printf("fx_s2308 %d is changed into double %d\n", a, FX_TO_INT(a));
printf("\n===Conversion: fx to short===\n");
printf("fx_s2308 %lf is changed into double %d\n", a, FX_TO_SHORT(a));
printf("fx_s2308 %d is changed into double %d\n", a, FX_TO_SHORT(a));
printf("\n===Constant: PI===\n");
printf("PI의 fx_2308 값: %lf\n",FX_PI);
printf("PI의 fx_2308 값: %d\n",FX_PI);
printf("\n===Constant: Inverse PI===\n");
printf("1/PI의 fx_2308 값: %lf\n",FX_INV_PI);
printf("1/PI의 fx_2308 값: %d\n",FX_INV_PI);
double da;
double db;
scanf("%lf %lf", &da, &db);
fx_s2308 fa,fb,fc;
fa=DOUBLE_TO_FX(da);
fb=DOUBLE_TO_FX(db);
fc=fx_2308_l_mul(fa,fb);
printf("Exact answer=%f func result =%f, error=%f\n", da*db, FX_TO_DOUBLE(fc), da*db-FX_TO_DOUBLE(fc));
fc=fx_2308_l_mul2(fa,fb);
printf("Exact answer = %f func result =%f, error=%f\n",da*db, FX_TO_DOUBLE(fc), da*db-FX_TO_DOUBLE(fc));
fc=fx_2308_l_mul3(fa,fb);
printf("Exact answer = %f func result =%f, error=%f\n",da*db, FX_TO_DOUBLE(fc), da*db-FX_TO_DOUBLE(fc));
fc=fx_2308_l_mul4(fa,fb);
printf("Exact answer = %f func result =%f, error=%f\n",da*db, FX_TO_DOUBLE(fc), da*db-FX_TO_DOUBLE(fc));
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment