我写了两个函数:
unsigned float_twice(unsigned u)
将u
解释为浮点数的二进制表示形式(bin。rep。),并应返回bin。代表仅通过位操作获得两倍于该浮点数的数字。
unsigned float2unsig(float x)
返回bin。代表之x
:
// For little-endian machines.
unsigned float2unsig(float x) {
size_t len=sizeof(float),i;
unsigned char *start;
unsigned output=0;
start=(unsigned char *)(&x);
for (i = 0; i < len; i++){
output=output|start[i]<<(8*i);
}
return(output);
}
验证float_twice
对于单个值是否确实按预期工作很简单。例如,对于值88.125,我可以这样进行测试:
float f=88.125,twf=2*f;
unsigned u=float2unsig(88.125),twu=float_twice(u);
if (float2unsig(twf)==twu) printf("OK.\n");
但是,我想测试float_twice
是否有每个无符号u
(从0到UINT_MAX),所以我需要一个函数unsig2float
来产生浮点数给定它的垃圾箱。代表,但结构类似于float2unsig
的东西将无法工作。我想我可以实现IEEE浮点标准规则,但是难道我没有更简单的东西吗?