5楼和我最开始的想法差不多,我最开始的结果是这样的
#define compare(a,b) (a==b)?"a=b":( ( (a-b)& 0x80000000 ) ? "a<b":"a>b")
但由于这种情况只能解决整数的情况,而题目是实数,所以这个方法我放弃了,昨天晚上终于让我想出来了
#define compare(a,b) ((a==0&&b==0||a==b)?"a=b":(((int)((a-b)/(fabs(a)+fabs(b))+1))?"a>b":"a<b"))
解释一下:
首先可以肯定(a-b) <=(fabs(a)+fabs(b)).fabs是一个取绝对值的函数,令X=(a-b)/(fabs(a)+fabs(b)),在前面的条件下,a,b不能同时为0,且a不能等于b,所以,-1<=X<0(a<b的情况),0<X<=1(a>b的情况);所以0<=X+1<1(a<b的情况),1<X+1<=2(a>b的情况);当a<b时,(int)(X+1)==0,所以得到a<b;当a>b时,(int)(X+1)肯定是真值(1或2),所以得到a>b
[此贴子已经被作者于2007-11-18 11:21:19编辑过]