CSAPP作业
第二章
2.84
按照x,y的符号分类讨论,特判+0,-0。
点击查看代码
#include<iostream>
using namespace std;
/*
*return bits of float x
*/
unsigned f2u(float x)
{
return *(unsigned*)&x;
}
/*
*check if float x not bigger than float y
*x,y!=NaN
* -0=+0
*/
bool float_le(float x,float y)
{
unsigned ux = f2u(x),uy=f2u(y);
unsigned sx = ux >> 31, sy = uy >> 31;
return (!(ux << 1) && !(uy << 1)) || (sx && !sy) || (!sx && !sy && ux <= uy) || (sx && sy && ux >= uy);
}
int main()
{
cout << float_le(+0.0, -0.0) << endl;
cout << float_le(+0.1, -0.0) << endl;
cout << float_le(1.2, 1.4) << endl;
return 0;
}