#include <iostream>
using namespace std;
typedef unsigned int fint;
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
#define make_fint(i,f) (fint)(f | i << 20) // int를 부동소수점 마냥 쓰기
#define get_int(i) (fint)(i >> 20) // 정수부분 가져오기
#define get_float(f) (fint)((f << 12) >> 12) // 소수점 아래 부분 가져오기
#define get_upper(a) (fint)(a >> 20) // 소수점끼리 연산으로 정수로 올라온 숫자 가져오기
fint fint_plus(fint a, fint b)
{
int ai, af;
int bi, bf;
int upper;
int ri, rf;
ai = get_int(a);
af = get_float(a);
bi = get_int(b);
bf = get_float(b);
rf = af + bf;
upper = get_upper(rf);
ri = ai + bi + upper;
return make_fint(ri,rf);
}
fint fint_sub(fint a, fint b)
{
int ai, af;
int bi, bf;
int upper;
int ri, rf;
ai = get_int(a) - 1;
af = get_float(a);
bi = get_int(b);
bf = get_float(b);
rf = (af + (1<<21)) - bf;
upper = get_upper(rf);
ri = (ai + upper) - bi;
return make_fint(ri,rf);
}
int main()
{
int a = 0xff0;
int b = 0xf5ff0;
fint c = make_fint(a,b);
printf("%x\n", c);
fint d = get_int(c);
fint e = get_float(c);
printf("int : %x, float : %x\n", d, e);
fint f,g;
f = make_fint(5,5000);
g = make_fint(4,9920);
fint sum = fint_plus(f,g);
fint sub = fint_sub(f,g);
printf("a = %d.%d, b = %d.%d\n",
get_int(f), get_float(f), get_int(g),get_float(g));
printf("plus %d.%d, sub %d.%d\n",
get_int(sum), get_float(sum), get_int(sub),get_float(sub));
/*
5.005
-4.992
--------
008 + 005
013
5.992
-6.001
---------
-1.991
*/
}
// 하루히 와핑 소스
/*
// 바꾼 이미지 복구? 음.. 제거쪽이 해석이 맞을지도
//v3.0
function MM_swapImgRestore()
{
var i,x,a=document.MM_sr;
for(i=0; a && i<a.length&&(x=a[i]) && x.oSrc;i++)
x.src=x.oSrc;
}
// 이미지들을 먼저 읽어오기
//v3.0
function MM_preloadImages()
{
var d=document;
if(d.images)
{
if(!d.MM_p)
d.MM_p = new Array();
var i, j = d.MM_p.length, a=MM_preloadImages.arguments;
for(i=0; i < a.length; i++)
if (a[i].indexOf("#") != 0)
{
d.MM_p[j]=new Image;
d.MM_p[j++].src=a[i];
}
}
}
// 오브젝트 찾기 (즉 케릭터가 주목하는 방향 좌표)
//v4.01
function MM_findObj(n, d)
{
var p,i,x;
if(!d)
d=document;
if((p=n.indexOf("?")) > 0 && parent.frames.length)
{
d=parent.frames[n.substring(p+1)].document;
n=n.substring(0,p);
}
if(!(x=d[n]) && d.all)
x=d.all[n];
for (i=0; !x && i<d.forms.length; i++)
x=d.forms[i][n];
for(i=0; !x && d.layers && i<d.layers.length; i++)
x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById)
x=d.getElementById(n);
return x;
}
// 이미지 바꾸기
//v3.0
function MM_swapImage()
{
var i, j=0, x, a=MM_swapImage.arguments;
document.MM_sr = new Array;
for(i=0; i < (a.length-2); i+=3)
if ((x = MM_findObj(a[i])) !=null)
{
document.MM_sr[j++]=x;
if(!x.oSrc)
x.oSrc=x.src;
x.src=a[i+2];
}
}
*/
'C/C++언어' 카테고리의 다른 글
코드 최적화 (0) | 2008.05.09 |
---|---|
[알고리즘]고정소수점(fixed point) 연산 (0) | 2008.05.09 |
고정 소수점 (0) | 2008.05.09 |
각 언어별 3중 포인터 (0) | 2008.05.06 |
쉬프트 연산과 곱셈 (0) | 2008.03.26 |