F407的FPU运算精度

2019-07-21 03:52发布

我今天看原子哥的UCOS开发手册说
  如果使能了 FPU 单元的话就可以使用它来对单精度浮点数进行计算,双精度浮
点数的计算仍然要使用到C 运行库。
那也就是FPU只能运算float类型

后边又说浮点寄存器可以两个32位组成一个双精度的寄存器

然后我今天看了一下我的代码 double类型还是用了V指令
确实是调用了C库里的函数 比如__aeabi_dmul, __aeabi_ddiv, __aeabi_dadd

然后就明白了

FPU确实只能计算单精度浮点数!
曾经天真的以为双精度也可以

刚改了改代码!
如果计算float*3.0
一定要写成float*3.0f
要不然还是会调用库函数





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
taizonglai
1楼-- · 2019-07-21 04:59
多谢分享,很有意义,M4只可以单精度,M7的FPU貌似是可以双精度的
exv
2楼-- · 2019-07-21 07:39

 求教各位一个问题:

人们往往把对浮点计算能力作为考量机子性能的重要标准,可是在很多应用以及底层驱动中并未涉及到太多浮点数。

之前我发过这样一个帖子:
STM32下的元胞自动机(二维宇宙模拟)     
如此复杂的“动画”甚至可在低端的单片机上实现 。
(不涉及浮点数)

如果只把机子当作计算工具,以浮点计算能力考量其性能自然是合理的。
而事实上各种机子相当的情况下并非单纯的计算工具,比如作为信息采集工具,逻辑分析工具等。

我的问题是:
以什么标准去考量不以浮点计算为目的的机子性能更合理些。

我先说一个可能的参考指标:主频/晶振频率

各位畅所欲言~

Theone
3楼-- · 2019-07-21 08:20
回复【2楼】zuozhongkai:
---------------------------------
要求不是很高 我把以前的代码都改成float类型了 然后看了一下汇编代码 确实没有再调用库函数
Theone
4楼-- · 2019-07-21 10:28
 精彩回答 2  元偷偷看……
exv
5楼-- · 2019-07-21 15:29
回复【5楼】Theone:
---------------------------------
听过这样一种说法:
“在日本,天气预报非常准确。基本说几点会下雨就会下雨,很少出现错误的情况。”
而国内虽然有世界浮点性能最好的计算机,但是我们这的天气预报除了一些大型气象灾害(台风/寒潮/大范围雾霾)能预报得准,
小范围的天气预报难以达到日本的精度。

按理说,天气预报和Julia分形都非常依赖浮点运算性能。
长期以来,评价机子性能方面过于强调浮点数,是不是还有一些很重要的因素被忽略了?

比如你说的带宽,还有我之前提到的主频。
再有一点是底层架构组织,比如ARM,CISC/RISC,在很大程度上也是有影响的,不过这方面就无法像主频/带宽/RAM一样给一个具体的数值来评价;
这类难于直接评估的特征,往往对最后的性能影响甚大。
Theone
6楼-- · 2019-07-21 18:12
回复【6楼】exv:
---------------------------------
你这样就是在说 驱动的关系 一样的硬件驱动不一样性能也不一样。
要评价就只能依靠具体的跑分得出来的结果对比 ,这样最明显。

一周热门 更多>