keil for arm里如何判断无效浮点数?

[复制链接]
4700|8
 楼主| Wxy8030 发表于 2012-2-28 21:13 | 显示全部楼层 |阅读模式
请教兄弟们,keil for arm里如何判断无效浮点数(单精度)?有现成的函数么?
dengm 发表于 2012-2-29 00:41 | 显示全部楼层
有无效的浮点数吗?
dqyubsh 发表于 2012-2-29 07:00 | 显示全部楼层
我觉得,应该避免出现这样的情况,而不是等待它出现的时候采取某种措施。

比如,做除法之前,先判断一下除数有没有可能小于0.001,如果小于,就别除了。可以先将除数放大固定倍数,或者强制除数<=0.001,反正不能让它等于0的时候去做除法。

预防自杀总比自杀之后再打120好的多吧。
 楼主| Wxy8030 发表于 2012-2-29 08:31 | 显示全部楼层
是把一个浮点保存于 EEPROM 中,读出来的时候为了防止 EEPROM 失效,需要判断一下,C51里有 _chkfloat_ 函数的,keil for arm 里没找着。
ayb_ice 发表于 2012-2-29 08:33 | 显示全部楼层
C51有个库内嵌库函数_chkfloat_
ARM应该也有吧
ayb_ice 发表于 2012-2-29 08:42 | 显示全部楼层
看看这个函数__fp_status()
我只是粗略看了一下
 楼主| Wxy8030 发表于 2012-2-29 09:12 | 显示全部楼层
找到了:isfinite,谢谢  ayb_ice
zhanghui54 发表于 2016-11-5 12:36 | 显示全部楼层
楼上你也不说一下你是在哪里找到的,我也需要用一下这个函数
linqing171 发表于 2016-11-6 20:00 | 显示全部楼层
#include <math.h>
其中复制出来为:
#define isnan(x) \
    ((sizeof(x) == sizeof(float)) \
        ? __ARM_isnanf(x) \
        : __ARM_isnan(x))
    /*
     * Returns TRUE if x is a NaN.
     */

再展开一步为:
_ARMABI_INLINE_DEF _ARMABI_SOFTFP int __ARM_isnanf(float __x)
{
    return (0x7f800000 - (__FLT(__x) & 0x7fffffff)) >> 31;
}
_ARMABI_INLINE_DEF _ARMABI_SOFTFP int __ARM_isnan(double __x)
{
    unsigned __xf = __HI(__x) | ((__LO(__x) == 0) ? 0 : 1);
    return (0x7ff00000 - (__xf & 0x7fffffff)) >> 31;
}
    /* Return 1 if __x is a NaN, 0 otherwise */
    /* Used by isnan macro */
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

2263

帖子

2

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