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;
}
posted @ 2022-09-22 20:47  nofind  阅读(29)  评论(0编辑  收藏  举报