double Sqrt(double f)
{
union
{
unsigned __int64 i;
double fv;
}u;
u.fv=f;
__m64 sm;
sm.m64_u64=0x3ff;
__m64 sl;
sl.m64_i64=52;
sm=_mm_sll_si64(sm,sl);
sm.m64_u64=u.i+sm.m64_u64;
sl.m64_i64=1;
sm = _mm_srl_si64(sm, sl);
u.i= sm.m64_u64;
_m_empty( );
u.fv= u.fv + f/u.fv;
u.fv= 0.25*u.fv + f/u.fv;
return u.fv;
}
参考https://blog.csdn.net/swustzhaoxingda/article/details/83271686