清雨影 发表于 2013-2-18 03:16:41

STC90C516RD+的浮点数怎么算的乱七八糟的(已解决)

本帖最后由 清雨影 于 2013-2-18 16:55 编辑

最近写了个计算器,关于计算部分的代码在VC++下调试过的,都可以正常运行。
移植到了单片机上,不说别的,就算一个2+34算出来都是什么36.0423什么的。
我用的是double,不是说double在keil里面等同float处理吗?
还是我转换成字符的时候出问题了?
data_trans为一个float数组
        smg=*data_trans>=0?'+':'-';
        *data_trans=fabs(*data_trans);
        smg=(uchar)(*data_trans)%10+0x30;
        smg='.';
        smg=(uchar)(*data_trans*10)%10+0x30;
        smg=(uchar)(*data_trans*100)%10+0x30;
        smg=(uchar)(*data_trans*1000)%10+0x30;
        smg=(uchar)(*data_trans*10000)%10+0x30;
        smg=(uchar)(*data_trans*100000)%10+0x30;
        smg=(uchar)(*data_trans*1000000)%10+0x30;

        smg='*';
        smg='1';
        smg='0';
        smg='^';
        smg=i>=0?'+':'-';
        if(i<0){i=0-i;}
        smg=i/10%10+0x30;
        smg=i%10+0x30;
        smg=0;
我到现在都睡不着啊!
-------------------------------------------------华丽的分割线————————————————————————
我知道float的问题了,转换为字符的时候,不能像我那样转换
先include标库stdio.h


unsigned char smg;
float float_data=0;
sprintf(smg,"%f",*float_data);

BXAK 发表于 2013-2-18 09:47:05

keil C51不支持double,用了也会被编译器自动转成float处理

清雨影 发表于 2013-2-18 13:04:32

BXAK 发表于 2013-2-18 09:47 static/image/common/back.gif
keil C51不支持double,用了也会被编译器自动转成float处理

可是就算float他也算得和VC上的不一样啊!

mbass51 发表于 2013-2-18 15:43:28

唔出奇,keil我用pow也出問題,有冇師兄知道

清雨影 发表于 2013-2-18 16:54:11

mbass51 发表于 2013-2-18 15:43 static/image/common/back.gif
唔出奇,keil我用pow也出問題,有冇師兄知道

我知道float的问题了,转换为字符的时候,不能像我那样转换
先include标库stdio.h


unsigned char smg;
float float_data=0;
sprintf(smg,"%f",*float_data);

pow函数本身没有问题。
还有,求求你,不要用广东话发帖,否则我就用吴方言回帖。晓得伐?

mbass51 发表于 2013-2-19 10:45:43

http://www.amobbs.com/thread-5511687-1-1.html
能否看一看,是pow在keil c51 u2 u4 的test

czpcz 发表于 2013-3-16 16:30:39

关于F005内部狗的使用
页: [1]
查看完整版本: STC90C516RD+的浮点数怎么算的乱七八糟的(已解决)