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

Method CosSin

TSMath.cpp:346–385  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

344}
345
346void Terathon::CosSin(float x, float *c, float *s)
347{
348 #ifndef TERATHON_NO_SIMD
349
350 vec_float b = VecMulScalar(VecAndc(VecLoadScalar(&x), VecFloatGetMinusZero()), VecLoadScalarConstant<0x4222F983>());
351 vec_float i = VecPositiveFloorScalar(b);
352 b = VecMulScalar(VecSubScalar(b, i), VecLoadScalarConstant<0x3CC90FDB>());
353
354 const TrigPair& cossin = GetTrigTable()[VecTruncateConvert(i) & 255];
355 vec_float cosine_alpha = VecLoadScalar(&cossin.x);
356 vec_float sine_alpha = VecLoadScalar(&cossin.y);
357
358 vec_float b2 = VecMulScalar(b, b);
359 vec_float sine_beta = VecNmsubScalar(VecMulScalar(b, b2), VecNmsubScalar(b2, VecLoadScalarConstant<0x3E2AAAAB>(), VecLoadScalarConstant<0x3C088889>()), b);
360 vec_float cosine_beta = VecNmsubScalar(b2, VecNmsub(b2, VecLoadScalarConstant<0x3D2AAAAB>(), VecLoadScalarConstant<0x3F000000>()), VecLoadScalarConstant<0x3F800000>());
361
362 vec_float sine = VecMaddScalar(sine_alpha, cosine_beta, VecMulScalar(cosine_alpha, sine_beta));
363 vec_float cosine = VecSubScalar(VecMulScalar(cosine_alpha, cosine_beta), VecMulScalar(sine_alpha, sine_beta));
364
365 VecStoreX(cosine, c);
366 VecStoreX((x < 0.0F) ? -sine : sine, s);
367
368 #else
369
370 float b = Fabs(x) * 40.74366543F; // 256 / tau
371 float i = PositiveFloor(b);
372 b = (b - i) * 0.0245436926F; // tau / 256
373
374 const TrigPair& cossin_alpha = GetTrigTable()[int32(i) & 255];
375
376 float b2 = b * b;
377 float sine_beta = b - b * b2 * (0.1666666667F - b2 * 0.008333333333F);
378 float cosine_beta = 1.0F - b2 * (0.5F - b2 * 0.04166666667F);
379
380 *c = cossin_alpha.x * cosine_beta - cossin_alpha.y * sine_beta;
381 float sine = cossin_alpha.y * cosine_beta + cossin_alpha.x * sine_beta;
382 *s = (x < 0.0F) ? -sine : sine;
383
384 #endif
385}
386
387float Terathon::Arcsin(float y)
388{

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