对浮点数取绝对值的几种方式(小端模式的情况)
双精度取绝对值
double d1 = -1.9832;
d1 = fabs(d1);
printf("d1 %lf\n", d1);
输出结果:
d1 1.983200
double d2 = -1.9832;
*((int*)&d2+1) &= 0x7fffffff;
printf("d2 %lf\n", d2);
输出结果:
d2 1.983200
double d3 = -1.9832;
*((long long*)&d3) &= 0x7fffffffffffffff;
printf("d3 %lf\n", d3);
输出结果:
d3 1.983200
typedef union {
double d4;
long long d4_i;
}DOUBLE_T;
DOUBLE_T d4;
d4.d4 = -1.9382;
d4.d4_i &= 0x7fffffffffffffff;
printf("d4 %lf\n", d4.d4);
输出结果:
d4 1.983200
typedef union {
double d5;
char d5_c[8];
}DOUBLE_TEST_T;
DOUBLE_TEST_T d5;
d5.d5 = -1.9382;
d5.d5_c[7] &= 0x7f;
printf("d5 %lf\n", d5.d5);
输出结果:
d5 1.983200
单精度取绝对值
float f1 = -1.9832f;
f1 = fabs(f1);
printf("f1 %f\n", f1);
输出结果:
f1 1.983200
float f2 = -1.9832;
*((int*)&f2) &= 0x7fffffff;
printf("f2 %f\n", f2);
输出结果:
f2 1.983200
typedef union {
float f3;
long f3_i;
}FLOAT_T;
FLOAT_T f3;
f3.f3 = -1.9832f;
f3.f3_i &= 0x7fffffff;
printf("f3 %f\n", f3.f3);
输出结果:
f3 1.983200
typedef union {
float f4;
char f4_c[4];
}FLOAT_TEST_T;
FLOAT_TEST_T f4;
f4.f4 = -1.9832f;
f4.f4_c[3] &= 0x7f;
printf("f4 %f\n", f4.f4);
输出结果:
f4 1.983200
大小端判断方式链接