C语言自定浮点运算

ama1997 2010-03-13 02:20:31
因为windows不支持浮点数的格式化,也不支持字符串到浮点数,所以我打算【自己完成】浮点数【运算和互换】
类型定义如下:
typedef struct{
unsigned long 整数部分;
unsigned long 小数部分;
} o_ufloat,正浮点;


有了类型当然就可以直接开始用了,但是运算却是一大难题。
如:
void ufloat_add(o_ufloat *s1,o_ufloat *s2) //正浮点加
{
//double a=9.9,b=9.9;
//float_add后为18.18,正确应为19.8,目前难题是进位处理。
s1->整数部分+=s2->小数部分;
s1->小数部分+=s2->小数部分;
}


正浮点 f1,f2; //f1和f2小数和整数都是9,也就是两个都是9.9
ufloat_add(&f1,&f2);//得到的肯定是18.18,但正确的应该是19.8


因此目前的问题就是进位和借位运算了。
我想加不可能把小数位越加越多,所以如果超出原小数位数,整数+1,小数除去第一位。
乘就是小数和小数乘,整数和小数、整数分别乘,如果整*小大过原来位就进位。
问题就是:浮点类型加减乘除,并能和字符串互换(o_ufloat类型没有负数,而转换到字符串可以很简单地用wsprintf完成)。
...全文
179 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ama1997 2010-03-13
  • 打赏
  • 举报
回复
o_ufloat *stouf(char* s1)//字符串到正浮点
{
o_ufloat f;
o_ufloat* p=&f;
char dot;
while(TRUE) //无限循环
{
if(o_isdigit(*s1)==1 && dot==0) //没遇到小数点,而且是数字
{
f.整数部分*=10;
f.整数部分+=*s1++; //位置前进
}
else if(*s1++=='.')//遇到小数点
{
dot=1;
}
else if(dot == 1 && o_isdigit(*s1)) //已经遇到小数点而且是数字
{
f.小数部分/=10;
f.小数部分+=*s1++;
}
else //什么都不是
{
break;
}
}
return p;
}


字符串到正浮点,感觉不怎么完善,大家可以帮改下
ama1997 2010-03-13
  • 打赏
  • 举报
回复
浮点到字符串:

char *uftos(o_ufloat *s1)//正浮点到字符串
{
char fs[30];
char* p=fs;
wsprintf(p,"%lu.%lu",s1->整数部分,s1->小数部分);
return p;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧