Hi team's I was troubled by a strange problem whole day,and at last,i found is about the nuttx math lib function float frexpf(float x, int *exponent),when the input x is postive, there is no problem,but when the input x is negative,the result is wrong! I tested with inpu x=60 and x=-60: x = 60; float sig = frexpf(x, &e); sig = 0.9375 e = 6;
that's right! x = -60; float sig = frexpf(x, &e); sig = -0 e = 2147483647; that's wrong! I check online in stackoverflow,there's a recommended design:https://stackoverflow.com/questions/40416682/portable-way-to-serialize-float-as-32-bit-integer According to the recommended design, i change float frexpf(float x, int *exponent) from: float frexpf(float x, int *exponent) { *exponent = (int)ceilf(log2f(x)); return x / ldexpf(1.0F, *exponent); } to: float frexpf(float x, int *exponent) { *exponent = (int)ceilf(log2f(fabsf(x))); return x / ldexpf(1.0F, *exponent); } and the problem is solved,i commit a pull request to solve the problem ,please help me to check is right or not, thanks! https://github.com/apache/incubator-nuttx/pull/5307 Best regards, Zou