censv 发表于 2022-11-27 18:05 ![]() 从你的图片上明显可以看出“NaN”的值应该为4,这里可以用两种方法解决。 一、定义宏来解决 #define STD_FLOAT 0 #define ZERO 1 #define POS_OF 2 #define NEG_OF 3 #define NaN 4 二、定义枚举来解决 typedef enum { STD_FLOAT = 0, ZERO = 1, POS_OF = 2, NEG_OF = 3, NaN = 4, } ResultType_t; 因为你的函数是返回的unsigned char, 所以用了这种方法,会出现数据类型强制转换;如果不想数据类型强制转换,就把函数返回类型由unsigned char修改成ResultType_t。 |
Hephaestus 发表于 2022-11-29 03:59 多谢帮助,你是个天使 |
censv 发表于 2022-11-28 20:45 那就是说其实你算出来的不是NaN,但是你算出来的结果按照你的项目需求有个合理范围,如果超过这个范围你就要把结果一律转换成NaN的意思吗?如果是的话,那么你在地板位的代码第9行很有问题,因为_chkfloat_函数的参数是float,而你填写了0xffffffff,编译器应该转换成4.295e9的浮点数送进去,当然不是NaN了。 我写了个测试代码,在MinGW上面编译通过:
关键一句:f=(float*)&i; 只有这么写,才能保证f的十六进制是0xffffffff,而不是对应的相同大小的浮点数。 |
angmall 发表于 2022-11-28 19:19 ![]() NaN的31位符号位是0或1无所谓,30~24位阶码必须全部是1,23~0位尾数只要是非零即可,所以板凳的答案也是对的,0xffffffff也是NaN。 |
楼主用错函数了吧,_chkfloat_()本身就是一个检测浮点数的函数,你所说的NaN本身就是这个函数的其中一个返回值,还是先看看C语言有关函数的知识吧 |
Hephaestus 发表于 2022-11-28 20:29 因为这个返回浮点数的函数是我写的 |
很奇怪的问题,一个返回浮点数的函数,当有错时,它就是返回NaN的,不是你想返回的。把函数返回值用_check_float_()查一下就行了,为什么要自己定义? |
应该是。 int NaN = 0x7F800001; |
人中狼 发表于 2022-11-27 23:29 那该怎么用 |
你应该先看懂说明文档中这个函数怎么用,你用错了 |
xuyaqi 发表于 2022-11-27 16:53 我要返回给调用者 |
#define NaN 0xFFFFFFFF |
通过串口发“NaN”。 |