请教如下C语言代码的意思

shixiaoxiang 2007-08-22 12:20:55
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,来实现以上功能,谢谢了!
...全文
584 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqpp 2007-08-24
  • 打赏
  • 举报
回复
我觉得咱们看也不是endian的问题呀,别人这个好像是一个将浮点运算转为整数运算的。
scrutin 2007-08-24
  • 打赏
  • 举报
回复
在一个union里面用struct包括大小两端参数 这样用是最方便的啊
有这么一个好的东西,方便简洁,为什么又不用呢?

拆开union 就比较麻烦
唐巧 2007-08-24
  • 打赏
  • 举报
回复
这个问题其实不太好,你应该学习为什么要用struct和union,而不是学习不用他们怎么写代码.

因为不用它们会带来很多问题不好处理,而这些问题没有讨论的价值.

就象你想用C代码实现C++的类的多态一样,没有多大意义.
liubingqian 2007-08-24
  • 打赏
  • 举报
回复
to:plusboy()
这是CSDN的老毛病了,可是没有看到CSDN有要解决这个问题的意思。他们更热衷于“升级”一些花里胡哨的东西。
plusboy 2007-08-24
  • 打赏
  • 举报
回复
CSDN论坛有点龊,贴个代码,缩进全没了,这样的论坛不适合讨论代码。。。
cqpp 2007-08-22
  • 打赏
  • 举报
回复
通过指针强制类型转换可以直接访问
double t; *((int*)&t)这样的
langkefeixia 2007-08-22
  • 打赏
  • 举报
回复
有斜杠的 只是离的比较远 哈哈
flyxian 2007-08-22
  • 打赏
  • 举报
回复
换行的时候是不是应该在行尾加一个斜杠\啊?
csShooter 2007-08-22
  • 打赏
  • 举报
回复
宏定义可以换行????
softwarewander 2007-08-22
  • 打赏
  • 举报
回复
这样用似乎有大小端的问题。

当然可以不用union和struct的方法了,

不过需要一大堆的位操作。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧