(感谢知乎大神的解惑)
上一篇博客引了一个有趣的位运算算法,可以通过位运算大致算出一个浮点数的平方根,虽然查找了相关资料,但是还是对原理有些困惑。
下面是代码:
float sqrt3(const float x)
{
union
{
int i;
float x;
} u;
u.x = x;
u.i = (1 << 29) + (u.i >> 1) - (1 << 22);
return u.x;
}
这个方法的误差还是有的(而且有点大)
首先,C中union 的存储方法与struct不同,union只存储一个成员变量,union的存储大小为字节对齐后所需空间最“大”的成员。

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



