#include <bits/stdc++.h>
using namespace std;
typedef unsigned float_bits;
float_bits float_absval这个函数对于浮点数f,计算|f|,如果f是NaN,直接返回f。
float_bits float_absval(float_bits f) {
unsigned tmp = f & 0x7FFFFFFF; //不要符号位
//(tmp & 0x7F800000) == 0x7F800000 判断exp是否全为1
//(tmp & 0x007FFFFF) != 0 判断frac是否全为0
if (((tmp & 0x7F800000) == 0x7F800000) && (tmp & 0x007FFFFF) != 0) {
return f;
}
//cout << "不是NaN" << endl;
return tmp;
}
int main() {
float_bits f;
for (f = 0; f <= 0xFFFFFFFF; f++) {
float_bits absval = float_absval(f);
printf("f: %u, |f|: %u\n", f, absval);
}
return 0;
}