![]() |
censv 發(fā)表于 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; 因為你的函數(shù)是返回的unsigned char, 所以用了這種方法,會出現(xiàn)數(shù)據類型強制轉換;如果不想數(shù)據類型強制轉換,就把函數(shù)返回類型由unsigned char修改成ResultType_t。 |
Hephaestus 發(fā)表于 2022-11-29 03:59 多謝幫助,你是個天使 |
censv 發(fā)表于 2022-11-28 20:45 那就是說其實你算出來的不是NaN,但是你算出來的結果按照你的項目需求有個合理范圍,如果超過這個范圍你就要把結果一律轉換成NaN的意思嗎?如果是的話,那么你在地板位的代碼第9行很有問題,因為_chkfloat_函數(shù)的參數(shù)是float,而你填寫了0xffffffff,編譯器應該轉換成4.295e9的浮點數(shù)送進去,當然不是NaN了。 我寫了個測試代碼,在MinGW上面編譯通過:
關鍵一句:f=(float*)&i; 只有這么寫,才能保證f的十六進制是0xffffffff,而不是對應的相同大小的浮點數(shù)。 |
angmall 發(fā)表于 2022-11-28 19:19 ![]() NaN的31位符號位是0或1無所謂,30~24位階碼必須全部是1,23~0位尾數(shù)只要是非零即可,所以板凳的答案也是對的,0xffffffff也是NaN。 |
樓主用錯函數(shù)了吧,_chkfloat_()本身就是一個檢測浮點數(shù)的函數(shù),你所說的NaN本身就是這個函數(shù)的其中一個返回值,還是先看看C語言有關函數(shù)的知識吧 |
Hephaestus 發(fā)表于 2022-11-28 20:29 因為這個返回浮點數(shù)的函數(shù)是我寫的 |
很奇怪的問題,一個返回浮點數(shù)的函數(shù),當有錯時,它就是返回NaN的,不是你想返回的。把函數(shù)返回值用_check_float_()查一下就行了,為什么要自己定義? |
應該是。 int NaN = 0x7F800001; |
人中狼 發(fā)表于 2022-11-27 23:29 那該怎么用 |
你應該先看懂說明文檔中這個函數(shù)怎么用,你用錯了 |
xuyaqi 發(fā)表于 2022-11-27 16:53 我要返回給調用者 |
#define NaN 0xFFFFFFFF |
通過串口發(fā)“NaN”。 |