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

[复制链接]
 楼主| 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 | 显示全部楼层
自己编个算法转换一下数据格式也行的
wh6ic 发表于 2013-5-20 10:22 | 显示全部楼层
四字节的浮点数分辨率有23Bit,一般系统肯定足够用了,没必要用double的精度来运算。只是要注意计算的顺序,不要人为引入不必要的分辨率损失。
KeilC51 头文件有double类型,但库中没有,一定要用的话可以自己添加,也不很难。
NE5532 发表于 2013-5-20 11:17 | 显示全部楼层
这个是编译器的问题,与8位机无关,而且8位机上尽量不要用复杂的数据类型,很慢的。
coody 发表于 2013-5-20 14:18 | 显示全部楼层
世纪初,公司做计算,用4位机大量的做16位(十进制16位哦)的计算。。。。
huangxz 发表于 2013-5-20 18:53 | 显示全部楼层
coody 发表于 2013-5-20 14:18
世纪初,公司做计算,用4位机大量的做16位(十进制16位哦)的计算。。。。 ...

;P没必要一定要这么做,如果还要这么做,那科技发展的意义何在?
200多年前,人家步行两个多月去北京,现在谁还会这么做?
 楼主| xjycug 发表于 2013-5-21 00:11 | 显示全部楼层
wh6ic 发表于 2013-5-20 10:22
四字节的浮点数分辨率有23Bit,一般系统肯定足够用了,没必要用double的精度来运算。只是要注意计算的顺序 ...

在哪个头文件中呢?
我使用sizeof(double)发现结果是4
 楼主| xjycug 发表于 2013-5-21 00: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字节
 楼主| xjycug 发表于 2013-5-21 00:30 | 显示全部楼层
NE5532 发表于 2013-5-20 11:17
这个是编译器的问题,与8位机无关,而且8位机上尽量不要用复杂的数据类型,很慢的。 ...

恩,我用的就是KEIL,看来真是硬伤了。。。
 楼主| xjycug 发表于 2013-5-21 00:31 | 显示全部楼层
dirtwillfly 发表于 2013-5-20 08:58
自己编个算法转换一下数据格式也行的

转换出来还要运算啊,编译器不支持,转换出来也算不了吧
 楼主| xjycug 发表于 2013-5-21 00:44 | 显示全部楼层
wh6ic 发表于 2013-5-20 10:22
四字节的浮点数分辨率有23Bit,一般系统肯定足够用了,没必要用double的精度来运算。只是要注意计算的顺序 ...

呵呵,四字节的浮点分辨率是不是24bit
dirtwillfly 发表于 2013-5-21 07:40 | 显示全部楼层
xjycug 发表于 2013-5-21 00:31
转换出来还要运算啊,编译器不支持,转换出来也算不了吧

把一个double类型的数据用四个char类型的字符串存储,算法也可以转换成char类型的运算的
 楼主| xjycug 发表于 2013-5-22 00:26 | 显示全部楼层
今天我想了想,感觉应用中4字节float也能算,而且能保证精度,所以将8字节double转换为4字节的float,然后拿float去运算。明天试试,感觉应该没有问题,谢谢大家!
lhbzqh 发表于 2013-5-23 10:21 | 显示全部楼层
我觉得你应该协调上位机的程序员修改一下,将double转成float再传给你,这样更好。
上位机的优势就是运算速度,能够让上位机计算的就让上位机运算好了。
chenbb8 发表于 2013-5-23 12:53 | 显示全部楼层
不是说不同的编译器浮点定义的不一样吗……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

185

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部