如何把一个很大的float数据提取出来。单片机C51
比如这个数据大于4294967295(这是无符号long能表示的最大值),假设这个数是5123456789,显然大了很多,如果直接强制转换成无符号long,肯定有数据丢失...
比如这个数据大于4294967295(这是无符号long能表示的最大值),假设这个数是5123456789,显然大了很多,如果直接强制转换成无符号long,肯定有数据丢失的,现在如何解决。
我这题的平台是单片机C51的,看好哦,不要搞那些纯C啊,C++啊,JAVA那种答案给我。当然,给一个思路也行,都是自学单片机,C语言没有系统学过,很菜。现在只会简单的C51。 展开
我这题的平台是单片机C51的,看好哦,不要搞那些纯C啊,C++啊,JAVA那种答案给我。当然,给一个思路也行,都是自学单片机,C语言没有系统学过,很菜。现在只会简单的C51。 展开
2个回答
展开全部
我以前试过,51单片机里float和double储存的只到小数点后6位,就像你说的5123456789在51单片机里是以5.123456e+9储存的,也就是5123456000,后边的都丢失了,所以简单的程序应该是不可能算到你说的精度的。在32位单片机上用long long 可以储存差不多20位的整数,但是keil 51是不支持的。
你用这么大的数干什么?不行就换一种方法吧。
你用这么大的数干什么?不行就换一种方法吧。
更多追问追答
追问
很笨的一个方法。自己玩单片机,做一个简易计算器。
想实现两个8位十进制数的加减乘除,加减显然没问题。但乘除在提取数据时遇到上面的问题。
我用最笨的方法,比如两个8位数直接相乘,用了float,如果用long,结果可能会超过long的范围的。
追答
可以用数组模拟加减乘除(整除不算小数位),89c52最起码可以做到15位以上,如果你想做小数的可以移植简易计算器的c程序,在proteus例程里面有两个简易计算器的仿真,一个汇编一个C语言
2014-08-19 · 知道合伙人软件行家
babytaomail
知道合伙人软件行家
向TA提问 私信TA
知道合伙人软件行家
采纳数:429
获赞数:1130
某公司嵌入式开发工程师; 熟悉VC++/C/MFC,Linux驱动,STM32,FPGA,Allegro/Pads及硬件电路设计
向TA提问 私信TA
关注
展开全部
你这个5123456789是float型的? 那这数本身这已经丢失精度了, 你想一下,float和long同是4个字节,为什么float反而会比long表示的范围大的多?
如果你这个数是字符串,有别的处理方法。
如果你这个数是字符串,有别的处理方法。
追问
是我说得不准确,如果是512345678.987,比如如果这是个数,你有什么方法提取每一位出来?
追答
空间足够的话直接使用sprintf()函数。float转成字符串。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询