博文
分段的插值算法(2006-03-18 18:24:00)
摘要:
/* 一元全区间不等距插值 ,由 AD 得到的数据必定是16位正整数,用 unsigned int */
float enlgr(unsigned int x[],float y[],int n,unsigned int t)
{
float z; /* 这里假设单调变化,且t在x[i]和x[i-1]之间成立 */
if(t==x[0]) return y[0];
for(i=1;i<n;i++) {
if(t==x[i]) return y[i];
if((signed int)(x[i]-t)*(signed int)(x[i-1]-t)<0) break; /* 找到 t 所在区间 */
}
z=(y[i]-y[i-1])*(t-x[i-1])/(x[i]-x[i-1]);
return z+y[i-1];
}......
浮点数在C语言存储格式的转换(2006-03-18 18:12:00)
摘要:/*************************************************************************************\
浮点数在C语言中是以IEEE格式存储的,一个浮点数占用四个字节,
例如浮点数34.526存为(160,26,10,66)这四个数
本子程序就是实现这种转换
creat at 2006.3.18
\*************************************************************************************/
#define uchar unsigned char
#define uint unsigned int
void FtoC(const float f)
{
uchar i,*px;
uchar x[4]; /*定义字符数组,准备存储浮点数的四个字节 */
void *pf;
px=x; /* px指针指向数组x */
pf=&f ; /*void 型指针指向浮点数首地址*/
for(i=0;i<4;i++)
{
*(px+i)=*((char*)pf+i);
/*强制void 型指针转成char型,因为*/
} /*void型指针不能运算*/
/*for(i=0;i<4;i++) ......