2.92. 遵循位级浮点编码规则,实现具有如下原型的函数:
/* Compute –f. If f is NaN, then return f. */
float_bits float_negate(float_bits f);
对于浮点数 f,这个函数计算- f 。如果 f 是 NaN,你的函数应该简单的返回 f。
测试你的函数,对参数 f 可以取的所有 2
32个值求值,将结果与你使用机器的浮
点运算得到的结果相比较
我的代码是这样的
#include<stdio.h>
typedef unsigned float_bits;
float_bits float_negate(float_bits f);
int main()
{
float_bits x,y;
scanf("%x",&x);
y=float_negate(x);
float f=*((float*)&y);
printf("%f\n",f);
}
float_bits float_negate(float_bits f)
{
unsigned s=f>>31;
unsigned exp=f>>23&0xff;
unsigned frac=f&0x7fffff;
if((exp==0xff)&&frac)#if it is NaN
return f;
else
return (~(s<<31))|(exp<<23)|frac;#other=negative f
}
在32位linux机器运行结果不对
请问是什么原因以及应该如何修正呢?