打印

8位单片机能够支持8字节的双精度浮点类型吗?

[复制链接]
8951|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xjycug|  楼主 | 2013-5-20 01:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
8位单片机中有一个字节的Char类型,有两个字节的int类型,有四个字节的long 和 float 类型
但是有没有8个字节的double类型呢?计算机传到单片机是8字节的double类型,在单片机中能够运算吗?如果单片机最大只支持float,那么是不是在单片机中运算就会损失精度?谢谢

相关帖子

沙发
ayb_ice| | 2013-5-20 07:53 | 只看该作者
有些可以的,这完全取决于编译器
KEIL C51不支持

使用特权

评论回复
板凳
ZhangStudy| | 2013-5-20 08:05 | 只看该作者
8位的double转换为float会损失精度,但float也有7位有效精度,对于8位机来说,应该够用。
如果需要用单片机计算高精度数据,要么用32位单片机,要么用DSP。

使用特权

评论回复
地板
dirtwillfly| | 2013-5-20 08:58 | 只看该作者
自己编个算法转换一下数据格式也行的

使用特权

评论回复
5
wh6ic| | 2013-5-20 10:22 | 只看该作者
四字节的浮点数分辨率有23Bit,一般系统肯定足够用了,没必要用double的精度来运算。只是要注意计算的顺序,不要人为引入不必要的分辨率损失。
KeilC51 头文件有double类型,但库中没有,一定要用的话可以自己添加,也不很难。

使用特权

评论回复
6
NE5532| | 2013-5-20 11:17 | 只看该作者
这个是编译器的问题,与8位机无关,而且8位机上尽量不要用复杂的数据类型,很慢的。

使用特权

评论回复
7
coody| | 2013-5-20 14:18 | 只看该作者
世纪初,公司做计算,用4位机大量的做16位(十进制16位哦)的计算。。。。

使用特权

评论回复
8
huangxz| | 2013-5-20 18:53 | 只看该作者
coody 发表于 2013-5-20 14:18
世纪初,公司做计算,用4位机大量的做16位(十进制16位哦)的计算。。。。 ...

;P没必要一定要这么做,如果还要这么做,那科技发展的意义何在?
200多年前,人家步行两个多月去北京,现在谁还会这么做?

使用特权

评论回复
9
xjycug|  楼主 | 2013-5-21 00:11 | 只看该作者
wh6ic 发表于 2013-5-20 10:22
四字节的浮点数分辨率有23Bit,一般系统肯定足够用了,没必要用double的精度来运算。只是要注意计算的顺序 ...

在哪个头文件中呢?
我使用sizeof(double)发现结果是4

使用特权

评论回复
10
xjycug|  楼主 | 2013-5-21 00:11 | 只看该作者
哇,好多热心的朋友来解答,真是非常感谢啊!

使用特权

评论回复
11
xjycug|  楼主 | 2013-5-21 00:18 | 只看该作者
wh6ic 发表于 2013-5-20 10:22
四字节的浮点数分辨率有23Bit,一般系统肯定足够用了,没必要用double的精度来运算。只是要注意计算的顺序 ...

主要是上位机传来double型的变量,是8个字节,计算机存储的double型,第63位是符号位,第62到52是幂,第51位到0是小数部分。单片机需要将两个double型做一个运算,我想使用union定义一个联合,将double与8个char联合,从串口来得字节一一赋给联合内的char型,然后使用double运算。结果double在单片机中也是4字节的。不知怎么就让编译器给认为他是8字节

使用特权

评论回复
12
xjycug|  楼主 | 2013-5-21 00:30 | 只看该作者
NE5532 发表于 2013-5-20 11:17
这个是编译器的问题,与8位机无关,而且8位机上尽量不要用复杂的数据类型,很慢的。 ...

恩,我用的就是KEIL,看来真是硬伤了。。。

使用特权

评论回复
13
xjycug|  楼主 | 2013-5-21 00:31 | 只看该作者
dirtwillfly 发表于 2013-5-20 08:58
自己编个算法转换一下数据格式也行的

转换出来还要运算啊,编译器不支持,转换出来也算不了吧

使用特权

评论回复
14
xjycug|  楼主 | 2013-5-21 00:44 | 只看该作者
wh6ic 发表于 2013-5-20 10:22
四字节的浮点数分辨率有23Bit,一般系统肯定足够用了,没必要用double的精度来运算。只是要注意计算的顺序 ...

呵呵,四字节的浮点分辨率是不是24bit

使用特权

评论回复
15
dirtwillfly| | 2013-5-21 07:40 | 只看该作者
xjycug 发表于 2013-5-21 00:31
转换出来还要运算啊,编译器不支持,转换出来也算不了吧

把一个double类型的数据用四个char类型的字符串存储,算法也可以转换成char类型的运算的

使用特权

评论回复
16
xjycug|  楼主 | 2013-5-22 00:26 | 只看该作者
今天我想了想,感觉应用中4字节float也能算,而且能保证精度,所以将8字节double转换为4字节的float,然后拿float去运算。明天试试,感觉应该没有问题,谢谢大家!

使用特权

评论回复
17
lhbzqh| | 2013-5-23 10:21 | 只看该作者
我觉得你应该协调上位机的程序员修改一下,将double转成float再传给你,这样更好。
上位机的优势就是运算速度,能够让上位机计算的就让上位机运算好了。

使用特权

评论回复
18
chenbb8| | 2013-5-23 12:53 | 只看该作者
不是说不同的编译器浮点定义的不一样吗……

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

185

帖子

2

粉丝