请教如下C语言代码的意思
typedef union
{
TYPE value;
struct
{
unsigned int lsw;
unsigned int msw;
} parts;
} ieee_double_shape_type;
/* Get the more significant 32 bit int from a double. */
#define GET_HIGH_WORD(i,d)\
do {\
ieee_double_shape_type gh_u;\
gh_u.value = (d);\
(i) = gh_u.parts.msw;\
} while (0)
/* Set the less significant 32 bits of a double from an int. */
#define SET_LOW_WORD(d,v)\
do {\
ieee_double_shape_type sl_u;\
sl_u.value = (d);\
sl_u.parts.lsw = (v);\
(d) = sl_u.value;\
} while (0)
用的时候:
TYPE __kernel_sin(TYPE x, TYPE y, int iy)
{
TYPE z,r,v;
int ix;
GET_HIGH_WORD(ix,x);
ix = ix & 0x7fffffff;/* high word of x */
if(ix <0x3e400000)/* |x| < 2**-27 */
{if(x==0) return x;}/* generate inexact */
z= x*x;
v= z*x;
r= S2+z*(S3+z*(S4+z*(S5+z*S6)));
if(iy==0) return x+v*(S1+z*r);
else return x-((z*(half*y-v*r)-y)-v*S1);
}
不知道为什么非要用union和struct?
高手能否告诉我不用union和struct,来实现以上功能,谢谢了!
[解决办法]
通过指针强制类型转换可以直接访问
double t; *((int*)&t)这样的
[解决办法]
这样用似乎有大小端的问题。
当然可以不用union和struct的方法了,
不过需要一大堆的位操作。
[解决办法]
宏定义可以换行????
[解决办法]
换行的时候是不是应该在行尾加一个斜杠\啊?
[解决办法]
有斜杠的 只是离的比较远 哈哈
[解决办法]
这个问题其实不太好,你应该学习为什么要用struct和union,而不是学习不用他们怎么写代码.
因为不用它们会带来很多问题不好处理,而这些问题没有讨论的价值.
就象你想用C代码实现C++的类的多态一样,没有多大意义.
[解决办法]
在一个union里面用struct包括大小两端参数 这样用是最方便的啊
有这么一个好的东西,方便简洁,为什么又不用呢?
拆开union 就比较麻烦
[解决办法]
我觉得咱们看也不是endian的问题呀,别人这个好像是一个将浮点运算转为整数运算的。
[解决办法]
CSDN论坛有点龊,贴个代码,缩进全没了,这样的论坛不适合讨论代码。。。
[解决办法]
to:plusboy()
这是CSDN的老毛病了,可是没有看到CSDN有要解决这个问题的意思。他们更热衷于“升级”一些花里胡哨的东西。