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

add long long

parent c7698e54
No related branches found
No related tags found
1 merge request!5add long long
#pragma once #pragma once
typedef double fx_s2308; typedef int fx_s2308;
#define FX_TO_DOUBLE(a) ((double) (a/(256.0))) #define FX_TO_DOUBLE(a) ((double) (a/(256.0)))
#define FX_TO_FLOAT(a) ((float) (a/(256.0))) #define FX_TO_FLOAT(a) ((float) (a/(256.0)))
#define FX_TO_INT(a) ((int) (a/(256.0))) #define FX_TO_INT(a) ((int) (a/(256.0)))
#define FX_TO_SHORT(a) ((short) (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_ADD(a,b) ((a)+(b))
#define FX_SUB(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)) #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 <stdio.h>
#include "fx_s2308_double.h" #include "fx_s2308_double.h"
#include "fx_s2308_longlong.h"
int main() { int main() {
fx_s2308 a = 2000; fx_s2308 a = 2000;
fx_s2308 b = 1000; fx_s2308 b = 1000;
printf("\n===Calculation: Addition===\n"); 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("\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("\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("\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"); printf("\n===Function: Sine===\n");
double a1=30.0; double a1=30.0;
fx_s2308 f_a1=DOUBLE_TO_FX(a1); fx_s2308 f_a1=DOUBLE_TO_FX(a1);
fx_s2308 sine_a1=fx_s2308_double_sine(f_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"); printf("\n===Function: Sqrt===\n");
double a2=100.0; double a2=100.0;
fx_s2308 f_a2=DOUBLE_TO_FX(a2); fx_s2308 f_a2=DOUBLE_TO_FX(a2);
fx_s2308 sqrt_a2=fx_s2308_double_sqrt(f_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"); printf("\n===Function: Power===\n");
double a3=64.0; double a3=64.0;
fx_s2308 f_a3=DOUBLE_TO_FX(a3); fx_s2308 f_a3=DOUBLE_TO_FX(a3);
fx_s2308 pow_a3=fx_s2308_double_pow(f_a3,2.0); 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("\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("\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("\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("\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("\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("\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; return 0;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment