MCPcopy Create free account
hub / github.com/EricLengyel/Terathon-Math-Library / Sqrt

Method Sqrt

TSMath.cpp:160–189  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

158
159
160float Terathon::Sqrt(float x)
161{
162 #ifdef TERATHON_SSE
163
164 float result;
165
166 vec_float v = _mm_load_ss(&x);
167 vec_float mask = _mm_cmplt_ss(v, VecLoadScalarConstant<0x00800000>());
168
169 vec_float r = _mm_rsqrt_ss(v);
170 r = _mm_mul_ss(_mm_sub_ss(VecLoadScalarConstant<0x40400000>(), _mm_mul_ss(v, _mm_mul_ss(r, r))), _mm_mul_ss(r, VecLoadScalarConstant<0x3F000001>()));
171
172 _mm_store_ss(&result, _mm_mul_ss(_mm_andnot_ps(mask, r), v));
173 return (result);
174
175 #else
176
177 if (x < Math::min_float)
178 {
179 return (0.0F);
180 }
181
182 uint32 i = 0x5F375A86 - (asuint(x) >> 1);
183 float r = asfloat(i);
184 r = (0.5F * r) * (3.0F - x * r * r);
185 r = (0.5F * r) * (3.0F - x * r * r);
186 return (r * x);
187
188 #endif
189}
190
191float Terathon::InverseSqrt(float x)
192{

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected