[STM32F4] 浮点数计算的精度

[复制链接]
 楼主| simple_head 发表于 2014-9-21 21:43 | 显示全部楼层 |阅读模式
stm32F407,MDK uVision 4.54, 浮点数计算的精度问题:

float x,y;
int a;
x = 一个浮点算式(多元函数)的计算结果,计算结果是3500.0;
                      //x的hex是:0x455abfff,翻译成float后为 3500.0
y = 3500.0f;          //y的hex是:0x455ac000,翻译成float后也是 3500.0
a = x;    //此时,a值为3499
a = y;    //此时,a值为3500
       
上面的几行程序在KEIL的软仿真里跑,就是注释中的结果。但是照抄到VC里面,x的计算结果为0x455ac000,同y值一样,并且后面给a赋值,a都是3500.

这样就是说STM32F407的float计算,同VC里面的float类型计算,精度不一样。另外,我发现,VC里面看watch中的float类型变量,显示都是8位十进制,例如0.12345678. 然而在KEIL中,watch中的float类型变量,显示都是6位十进制,例如0.123456.

请问,要做怎样的配置,才可以使得同样的程序,在KEIL中STM32F4的float计算结果同在VC中完全一样,bit to bit same?

我尝试过FPU模式的配置,如fully IEEE compatable mode, zero flush mode, different rounding settings, but dosn't seem to helpful to my problem... ... ???
李富贵 发表于 2014-9-21 21:57 | 显示全部楼层
别费劲了,bit to bit same本身就是完全无理的要求
 楼主| simple_head 发表于 2014-9-22 08:52 | 显示全部楼层
李富贵: why my request is unreasonable? Just several keywords is enoguht, thanks!
wallace_tsou 发表于 2014-9-22 09:26 | 显示全部楼层
X86使用80 bit 浮點數精度在計算
STM32F4xx 使用32 bit 精度
所以無法每個bit都相同。
 楼主| simple_head 发表于 2014-9-22 21:43 | 显示全部楼层
PC上,我的VC程序中进行计算的数据是定义成float型的,这是32bit的浮点,跟处理器无关吧。
wallace_tsou 发表于 2014-9-23 09:12 | 显示全部楼层
有關。X86因為硬體一定要轉成80 bit才能計算,在多次計算或是轉換下,只要仍是浮點數,其精度會一直維持80 bit,直到計算完成要寫回memory時才會轉成float。
在ARM,浮點數精度只有32bit,只要有轉換就開始失去精度,每次計算都會損失。
所以二者結果不會一樣,只有數值上差了一些。不過binary code有可能不同。
helainthus 发表于 2016-11-21 18:52 | 显示全部楼层
wallace_tsou 发表于 2014-9-23 09:12
有關。X86因為硬體一定要轉成80 bit才能計算,在多次計算或是轉換下,只要仍是浮點數,其精度會一直維持80  ...

大神,如果是普通的16位处理器呢?它的浮点精度会是多少啊?
戈卫东 发表于 2016-11-21 20:17 | 显示全部楼层
helainthus 发表于 2016-11-21 18:52
大神,如果是普通的16位处理器呢?它的浮点精度会是多少啊?

16位大概是整数模拟的吧,精度怎么样应该要看它是怎么实现的,但估计也就跟ARM的单精度FPU相当
wallace_tsou 发表于 2016-11-23 10:09 | 显示全部楼层
C浮點數有二個: float, double
float是32bit, double在8位元MCU上仍是32 bit。double在32位元MCU上是64 bit。
16位元MCU則不一定double有可能是32 bit或64 bit,要看compiler。所以要去查compiler manual。

评分

参与人数 1威望 +1 收起 理由
helainthus + 1 很给力!

查看全部评分

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

本版积分规则

13

主题

117

帖子

0

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