OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 18298|回复: 13

求助,f4计算float和double型数据精度问题。

[复制链接]

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2014-10-27
在线时间
0 小时
发表于 2015-1-21 00:29:55 | 显示全部楼层 |阅读模式
5金钱
请问stm32在计算float型和double型数据时精度是怎样的?请帮忙分析下下面的程序。
if(Step_Length_Record < 1.0)
  {
   Step_Length_Record += Step_Length;
  }
  else
  {               
   MOVE1_flag = 1;
  } 
if( MOVE1_flag == 1)
{
   printf("步长记录%f \r\n ", Step_Length_Record);
}   
当把Step_Length_Record定义为float型时输出为1.020000,但是定义成double型输出为1.000000,不知道是
什么原因,请知道的兄弟帮忙回答下,谢谢!

最佳答案

查看完整内容[请看2#楼]

精度取决于所选的芯片配置文件。 stm32的话,double 存储的位会比 float 多一倍。 printf只能控制显示出的而不会影响实际的精度, 如果要显示出更多double的数值,改成这样就好了 printf("步长记录%lf \r\n ", Step_Length_Record); 更多可参考我这个帖子: keil里如何设置八字节double
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

102

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2014-12-21
在线时间
0 小时
发表于 2015-1-21 00:29:56 | 显示全部楼层
精度取决于所选的芯片配置文件。

stm32的话,double 存储的位会比 float 多一倍。

printf只能控制显示出的而不会影响实际的精度,

如果要显示出更多double的数值,改成这样就好了

printf("步长记录%lf \r\n ", Step_Length_Record);

更多可参考我这个帖子:
keil里如何设置八字节double
回复

使用道具 举报

34

主题

809

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1863
金钱
1863
注册时间
2011-3-29
在线时间
139 小时
发表于 2015-1-21 00:29:56 | 显示全部楼层
强制类型转换。
业余程序玩家。
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164846
金钱
164846
注册时间
2010-12-1
在线时间
2098 小时
发表于 2015-1-21 00:33:29 | 显示全部楼层
这我也不太懂,帮顶。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2014-10-27
在线时间
0 小时
 楼主| 发表于 2015-1-21 00:37:43 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢原子哥帮顶...
回复

使用道具 举报

10

主题

559

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1614
金钱
1614
注册时间
2014-6-27
在线时间
863 小时
发表于 2015-1-21 08:16:28 | 显示全部楼层
回复【3楼】满满VS犬夜叉:
---------------------------------
类型当然是double类型精度高,这是不用怀疑的,结果不对是你输出的形式的问题。
回复

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2014-10-27
在线时间
0 小时
 楼主| 发表于 2015-1-21 12:01:41 | 显示全部楼层
回复【4楼】TinyBoy:
---------------------------------
哦,多谢!
回复

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2014-10-27
在线时间
0 小时
 楼主| 发表于 2015-1-21 22:04:05 | 显示全部楼层
回复【6楼】exv:
---------------------------------
如果程序中出现这样的警告,该怎样处理呢?当然如果将float改为double型可以去掉警告,但是应该怎样合理定义变量的类型呢?求指教
..\Device\device.c(296): warning:  #1035-D: single-precision operand implicitly converted to double-precision
回复

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2014-10-27
在线时间
0 小时
 楼主| 发表于 2015-1-21 22:24:04 | 显示全部楼层
回复【8楼】ofourme:
---------------------------------
哦,对对!我之前还想到过强制类型转换,一直忘了试了,多谢提醒!
回复

使用道具 举报

2

主题

102

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2014-12-21
在线时间
0 小时
发表于 2015-1-21 22:47:30 | 显示全部楼层
回复【7楼】满满VS犬夜叉:
---------------------------------
这个需要参考你具体的应用场合,如果不涉及一些特别精密的计算(天文/核物理)或者一些特殊需求(做 计算器什么的),一般float就够了。
强制转换可消除这个warning,这类提升精度的转换一般是可忽略的,若是精度降低的转换则需要注意。
回复

使用道具 举报

13

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2014-10-27
在线时间
0 小时
 楼主| 发表于 2015-1-28 14:54:58 | 显示全部楼层
回复【10楼】exv:
---------------------------------
好的!
回复

使用道具 举报

7

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2014-12-23
在线时间
39 小时
发表于 2015-1-28 16:02:15 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
请教原子哥一个问题,我用407做了一下测试关于浮点数运算的在如果是float类型的话,在开起和关闭硬件FPU的情况下运算速度有很大的不同,但是如果是double类型的话,在开起和关闭硬件FPU的情况下的运算速度几乎不变的,感觉FPU根本就无法工作了,不知道原子哥有没有类似的经验
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164846
金钱
164846
注册时间
2010-12-1
在线时间
2098 小时
发表于 2015-1-28 22:49:14 | 显示全部楼层
你把这个代码改了测试下看看: http://www.openedv.com/posts/list/41737.htm
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
发表于 2018-4-8 17:42:59 | 显示全部楼层
exv 发表于 2015-1-21 22:47
回复【7楼】满满VS犬夜叉:
---------------------------------
这个需要参考你具体的应用场合,如果不涉及 ...

学习了。出现低精度转换成高精度的提示是因为从stm32f103的板子移植成stm32f407时候才出现的吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-4-20 08:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表