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

Method Cos

TSMath.cpp:263–299  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

261}
262
263float Terathon::Cos(float x)
264{
265 #ifndef TERATHON_NO_SIMD
266
267 float result;
268
269 vec_float b = VecMulScalar(VecAndc(VecLoadScalar(&x), VecFloatGetMinusZero()), VecLoadScalarConstant<0x4222F983>());
270 vec_float i = VecPositiveFloorScalar(b);
271 b = VecMulScalar(VecSubScalar(b, i), VecLoadScalarConstant<0x3CC90FDB>());
272
273 const TrigPair& cossin = GetTrigTable()[VecTruncateConvert(i) & 255];
274 vec_float cosine_alpha = VecLoadScalar(&cossin.x);
275 vec_float sine_alpha = VecLoadScalar(&cossin.y);
276
277 vec_float b2 = VecMulScalar(b, b);
278 vec_float sine_beta = VecNmsubScalar(VecMulScalar(b, b2), VecNmsubScalar(b2, VecLoadScalarConstant<0x3E2AAAAB>(), VecLoadScalarConstant<0x3C088889>()), b);
279 vec_float cosine_beta = VecNmsubScalar(b2, VecNmsub(b2, VecLoadScalarConstant<0x3D2AAAAB>(), VecLoadScalarConstant<0x3F000000>()), VecLoadScalarConstant<0x3F800000>());
280
281 VecStoreX(VecSubScalar(VecMulScalar(cosine_alpha, cosine_beta), VecMulScalar(sine_alpha, sine_beta)), &result);
282 return (result);
283
284 #else
285
286 float b = Fabs(x) * 40.74366543F; // 256 / tau
287 float i = PositiveFloor(b);
288 b = (b - i) * 0.0245436926F; // tau / 256
289
290 const TrigPair& cossin_alpha = GetTrigTable()[int32(i) & 255];
291
292 float b2 = b * b;
293 float sine_beta = b - b * b2 * (0.1666666667F - b2 * 0.008333333333F);
294 float cosine_beta = 1.0F - b2 * (0.5F - b2 * 0.04166666667F);
295
296 return (cossin_alpha.x * cosine_beta - cossin_alpha.y * sine_beta);
297
298 #endif
299}
300
301float Terathon::Tan(float x)
302{

Callers

nothing calls this directly

Calls 13

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
VecStoreXFunction · 0.85
FabsFunction · 0.85
PositiveFloorFunction · 0.85

Tested by

no test coverage detected