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

Method Exp

TSMath.cpp:479–529  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

477}
478
479float Terathon::Exp(float x)
480{
481 // Values of exp(n) for integers n in the range [-88, 91].
482
483 alignas(64) static const uint32 table[180] =
484 {
485 0x00000000, 0x00B33687, 0x01739362, 0x022586E0, 0x02E0F96D, 0x0398E2CB, 0x044FCB22, 0x050D35D7,
486 0x05BFECBA, 0x06826D27, 0x07314490, 0x07F0EE94, 0x08A3BAF0, 0x095E884F, 0x0A1739FB, 0x0ACD89C1,
487 0x0B8BAD78, 0x0C3DD771, 0x0D0102BF, 0x0DAF5800, 0x0E6E511E, 0x0F21F3FE, 0x0FDC1DF9, 0x109595C7,
488 0x114B4EA4, 0x120A295C, 0x12BBC7F1, 0x137F388B, 0x142D70C9, 0x14EBBAEC, 0x15A031FC, 0x1659BA5A,
489 0x1713F623, 0x17C919B9, 0x1888A975, 0x1939BE2B, 0x19FC7361, 0x1AAB8EDC, 0x1B692BEB, 0x1C1E74DD,
490 0x1CD75D5D, 0x1D925B02, 0x1E46EAF1, 0x1F072DBA, 0x1FB7BA0F, 0x2079B5EA, 0x2129B229, 0x21E6A405,
491 0x229CBC92, 0x235506F2, 0x2410C457, 0x24C4C239, 0x2585B61D, 0x2635BB8D, 0x26F7000F, 0x27A7DAA4,
492 0x28642328, 0x291B090F, 0x29D2B706, 0x2A8F3216, 0x2B429F81, 0x2C044295, 0x2CB3C295, 0x2D7451BD,
493 0x2E26083C, 0x2EE1A93F, 0x2F995A46, 0x30506D87, 0x310DA433, 0x31C082B8, 0x3282D314, 0x3331CF19,
494 0x33F1AADE, 0x34A43AE5, 0x355F3638, 0x3617B02A, 0x36CE2A62, 0x378C1AA1, 0x383E6BCE, 0x39016791,
495 0x39AFE108, 0x3A6F0B5D, 0x3B227290, 0x3BDCC9FF, 0x3C960AAE, 0x3D4BED86, 0x3E0A9555, 0x3EBC5AB2,
496 0x3F800000, 0x402DF854, 0x40EC7326, 0x41A0AF2E, 0x425A6481, 0x431469C5, 0x43C9B6E3, 0x44891443,
497 0x453A4F54, 0x45FD38AC, 0x46AC14EE, 0x4769E224, 0x481EF0B3, 0x48D805AD, 0x4992CD62, 0x4A478665,
498 0x4B07975F, 0x4BB849A4, 0x4C7A7910, 0x4D2A36C8, 0x4DE75844, 0x4E9D3710, 0x4F55AD6E, 0x5011357A,
499 0x50C55BFE, 0x51861E9D, 0x52364993, 0x52F7C118, 0x53A85DD2, 0x5464D572, 0x551B8238, 0x55D35BB3,
500 0x568FA1FE, 0x5743379A, 0x5804A9F1, 0x58B44F11, 0x597510AD, 0x5A2689FE, 0x5AE2599A, 0x5B99D21F,
501 0x5C51106A, 0x5D0E12E4, 0x5DC1192B, 0x5E833952, 0x5F325A0E, 0x5FF267BB, 0x60A4BB3E, 0x615FE4A9,
502 0x621826B5, 0x62CECB81, 0x638C881F, 0x643F009E, 0x6501CCB3, 0x65B06A7B, 0x666FC62D, 0x6722F184,
503 0x67DD768B, 0x68967FF0, 0x694C8CE5, 0x6A0B01A3, 0x6ABCEDE5, 0x6B806408, 0x6C2E804A, 0x6CED2BEF,
504 0x6DA12CC1, 0x6E5B0F2E, 0x6F14DDC1, 0x6FCA5487, 0x70897F64, 0x713AE0EE, 0x71FDFE91, 0x72AC9B6A,
505 0x736A98EC, 0x741F6CE9, 0x74D8AE7F, 0x7593401C, 0x76482254, 0x77080156, 0x77B8D9AA, 0x787B3CCF,
506 0x792ABBCE, 0x79E80D11, 0x7A9DB1ED, 0x7B56546B, 0x7C11A6F5, 0x7CC5F63B, 0x7D86876D, 0x7E36D809,
507 0x7EF882B7, 0x7F800000
508 };
509
510 float f = Floor(x);
511 int32 i = int32(f) + 88;
512 if (i > 0)
513 {
514 x -= f;
515
516 float r = 1.0F / 362880.0F;
517 r = r * x + 1.0F / 40320.0F;
518 r = r * x + 1.0F / 5040.0F;
519 r = r * x + 1.0F / 720.0F;
520 r = r * x + 1.0F / 120.0F;
521 r = r * x + 1.0F / 24.0F;
522 r = r * x + 1.0F / 6.0F;
523 r = r * x + 0.5F;
524
525 return ((r * (x * x) + (x + 1.0F)) * reinterpret_cast<const float *>(table)[(i < 179) ? i : 179]);
526 }
527
528 return (0.0F);
529}
530
531float Terathon::Log(float x)
532{

Callers

nothing calls this directly

Calls 1

FloorFunction · 0.70

Tested by

no test coverage detected