打印
[STM32F4]

浮点数计算的精度

[复制链接]
2311|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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都相同。

使用特权

评论回复
5
simple_head|  楼主 | 2014-9-22 21:43 | 只看该作者
PC上,我的VC程序中进行计算的数据是定义成float型的,这是32bit的浮点,跟处理器无关吧。

使用特权

评论回复
6
wallace_tsou| | 2014-9-23 09:12 | 只看该作者
有關。X86因為硬體一定要轉成80 bit才能計算,在多次計算或是轉換下,只要仍是浮點數,其精度會一直維持80 bit,直到計算完成要寫回memory時才會轉成float。
在ARM,浮點數精度只有32bit,只要有轉換就開始失去精度,每次計算都會損失。
所以二者結果不會一樣,只有數值上差了一些。不過binary code有可能不同。

使用特权

评论回复
7
helainthus| | 2016-11-21 18:52 | 只看该作者
wallace_tsou 发表于 2014-9-23 09:12
有關。X86因為硬體一定要轉成80 bit才能計算,在多次計算或是轉換下,只要仍是浮點數,其精度會一直維持80  ...

大神,如果是普通的16位处理器呢?它的浮点精度会是多少啊?

使用特权

评论回复
8
戈卫东| | 2016-11-21 20:17 | 只看该作者
helainthus 发表于 2016-11-21 18:52
大神,如果是普通的16位处理器呢?它的浮点精度会是多少啊?

16位大概是整数模拟的吧,精度怎么样应该要看它是怎么实现的,但估计也就跟ARM的单精度FPU相当

使用特权

评论回复
9
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

粉丝