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

Method Sin

TSMath.cpp:222–261  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

220}
221
222float Terathon::Sin(float x)
223{
224 #ifndef TERATHON_NO_SIMD
225
226 float result;
227
228 vec_float b = VecMulScalar(VecAndc(VecLoadScalar(&x), VecFloatGetMinusZero()), VecLoadScalarConstant<0x4222F983>());
229 vec_float i = VecPositiveFloorScalar(b);
230 b = VecMulScalar(VecSubScalar(b, i), VecLoadScalarConstant<0x3CC90FDB>());
231
232 const TrigPair& cossin = GetTrigTable()[VecTruncateConvert(i) & 255];
233 vec_float cosine_alpha = VecLoadScalar(&cossin.x);
234 vec_float sine_alpha = VecLoadScalar(&cossin.y);
235
236 vec_float b2 = VecMulScalar(b, b);
237 vec_float sine_beta = VecNmsubScalar(VecMulScalar(b, b2), VecNmsubScalar(b2, VecLoadScalarConstant<0x3E2AAAAB>(), VecLoadScalarConstant<0x3C088889>()), b);
238 vec_float cosine_beta = VecNmsubScalar(b2, VecNmsub(b2, VecLoadScalarConstant<0x3D2AAAAB>(), VecLoadScalarConstant<0x3F000000>()), VecLoadScalarConstant<0x3F800000>());
239
240 vec_float sine = VecMaddScalar(sine_alpha, cosine_beta, VecMulScalar(cosine_alpha, sine_beta));
241
242 VecStoreX((x < 0.0F) ? -sine : sine, &result);
243 return (result);
244
245 #else
246
247 float b = Fabs(x) * 40.74366543F; // 256 / tau
248 float i = PositiveFloor(b);
249 b = (b - i) * 0.0245436926F; // tau / 256
250
251 const TrigPair& cossin_alpha = GetTrigTable()[int32(i) & 255];
252
253 float b2 = b * b;
254 float sine_beta = b - b * b2 * (0.1666666667F - b2 * 0.008333333333F);
255 float cosine_beta = 1.0F - b2 * (0.5F - b2 * 0.04166666667F);
256
257 float sine = cossin_alpha.y * cosine_beta + cossin_alpha.x * sine_beta;
258 return ((x < 0.0F) ? -sine : sine);
259
260 #endif
261}
262
263float Terathon::Cos(float x)
264{

Callers

nothing calls this directly

Calls 14

VecMulScalarFunction · 0.85
VecAndcFunction · 0.85
VecLoadScalarFunction · 0.85
VecFloatGetMinusZeroFunction · 0.85
VecPositiveFloorScalarFunction · 0.85
VecSubScalarFunction · 0.85
VecTruncateConvertFunction · 0.85
VecNmsubScalarFunction · 0.85
VecNmsubFunction · 0.85
VecMaddScalarFunction · 0.85
VecStoreXFunction · 0.85
FabsFunction · 0.85

Tested by

no test coverage detected