fennec
Loading...
Searching...
No Matches
constants.h
Go to the documentation of this file.
1// =====================================================================================================================
2// fennec, a free and open source game engine
3// Copyright © 2025 Medusa Slockbower
4//
5// This program is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program. If not, see <https://www.gnu.org/licenses/>.
17// =====================================================================================================================
18
30
31#ifndef FENNEC_MATH_EXT_CONSTANTS_H
32#define FENNEC_MATH_EXT_CONSTANTS_H
33
34
533
534#if FENNEC_COMPILER_MSVC
535#pragma warning(push)
536#pragma warning(disable:4305)
537#endif
538
539namespace fennec
540{
541
542// http://numbers.computation.free.fr/Constants/Miscellaneous/digits.html
543// 50 digits is sufficient for 128-bit floats
544
545// Break from 1TBS style for legibility
546
547// Rational Constants ==================================================================================================
548
549template<typename genType> constexpr genType zero() { return genType(0); }
550template<typename genType> constexpr genType one() { return genType(1); }
551template<typename genType> constexpr genType one_half() { return genType(0.5); }
552template<typename genType> constexpr genType three_over_two() { return genType(1.5); }
553
554
555
556// Irrational Constants ================================================================================================
557
558template<typename genType> constexpr genType one_third() { return 0.33333333333333333333333333333333333333333333333333; }
559template<typename genType> constexpr genType two_thirds() { return 0.66666666666666666666666666666666666666666666666666; }
560template<typename genType> constexpr genType sqrt_two() { return 1.41421356237309504880168872420969807856967187537694; }
561template<typename genType> constexpr genType sqrt_three() { return 1.73205080756887729352744634150587236694280525381038; }
562template<typename genType> constexpr genType sqrt_five() { return 2.23606797749978969640917366873127623544061835961152; }
563template<typename genType> constexpr genType sqrt_seven() { return 2.64575131106459059050161575363926042571025918308245; }
564template<typename genType> constexpr genType sqrt_ten() { return 3.16227766016837933199889354443271853371955513932521; }
565template<typename genType> constexpr genType one_over_sqrt_two() { return 0.70710678118654752440084436210484903928483593768847; }
566template<typename genType> constexpr genType one_over_sqrt_three() { return 0.57735026918962576450914878050195745564760175127012; }
567template<typename genType> constexpr genType one_over_sqrt_five() { return 0.44721359549995793928183473374625524708812367192230; }
568template<typename genType> constexpr genType cbrt_two() { return 1.25992104989487316476721060727822835057025146470150; }
569template<typename genType> constexpr genType qdrt_two() { return 1.18920711500272106671749997056047591529297209246381; }
570template<typename genType> constexpr genType two_raised_sqrt_two() { return 2.66514414269022518865029724987313984827421131371465; }
571
572
573
574// Pi ==================================================================================================================
575
576// Pi & Tau
577template<typename genType> constexpr genType pi() { return 3.14159265358979323846264338327950288419716939937510; }
578template<typename genType> constexpr genType tau() { return 6.28318530717958647692528676655900576839433879875021; }
579
580// Multiples of Pi
581template<typename genType> constexpr genType two_pi() { return 6.28318530717958647692528676655900576839433879875021; }
582template<typename genType> constexpr genType three_pi() { return 9.42477796076937971538793014983850865259150819812531; }
583template<typename genType> constexpr genType four_pi() { return 12.56637061435917295385057353311801153678867759750042; }
584
585// Fractions of Pi
586
587template<typename genType> constexpr genType half_pi() { return 1.57079632679489661923132169163975144209858469968755; }
588template<typename genType> constexpr genType three_halves_pi() { return 4.71238898038468985769396507491925432629575409906265; }
589
590template<typename genType> constexpr genType third_pi() { return 1.04719755119659774615421446109316762806572313312503; }
591template<typename genType> constexpr genType two_thirds_pi() { return 2.09439510239319549230842892218633525613144626625007; }
592template<typename genType> constexpr genType four_thirds_pi() { return 4.18879020478639098461685784437267051226289253250014; }
593template<typename genType> constexpr genType five_thirds_pi() { return 5.23598775598298873077107230546583814032861566562517; }
594
595template<typename genType> constexpr genType quarter_pi() { return 0.78539816339744830961566084581987572104929234984377; }
596template<typename genType> constexpr genType three_quarters_pi() { return 2.35619449019234492884698253745962716314787704953132; }
597template<typename genType> constexpr genType five_quarters_pi() { return 3.92699081698724154807830422909937860524646174921888; }
598template<typename genType> constexpr genType seven_quarters_pi() { return 5.49778714378213816730962592073913004734504644890643; }
599
600template<typename genType> constexpr genType fifth_pi() { return 0.62831853071795864769252867665590057683943387987502; }
601template<typename genType> constexpr genType two_fifths_pi() { return 1.25663706143591729538505735331180115367886775975004; }
602template<typename genType> constexpr genType three_fifths_pi() { return 1.88495559215387594307758602996770173051830163962506; }
603template<typename genType> constexpr genType four_fifths_pi() { return 2.51327412287183459077011470662360230735773551950008; }
604template<typename genType> constexpr genType six_fifths_pi() { return 3.76991118430775188615517205993540346103660327925012; }
605template<typename genType> constexpr genType seven_fifths_pi() { return 4.39822971502571053384770073659130403787603715912514; }
606template<typename genType> constexpr genType eight_fifths_pi() { return 5.02654824574366918154022941324720461471547103900016; }
607template<typename genType> constexpr genType nine_fifths_pi() { return 5.65486677646162782923275808990310519155490491887519; }
608
609template<typename genType> constexpr genType sixth_pi() { return 0.52359877559829887307710723054658381403286156656251; }
610template<typename genType> constexpr genType five_sixths_pi() { return 2.61799387799149436538553615273291907016430783281258; }
611template<typename genType> constexpr genType seven_sixths_pi() { return 3.66519142918809211153975061382608669823003096593762; }
612template<typename genType> constexpr genType eleven_sixths_pi() { return 5.75958653158128760384817953601242195436147723218769; }
613
614
615
616
617// Reciprocals of Pi
618template<typename genType> constexpr genType one_over_pi() { return 0.31830988618379067153776752674502872406891929148091; }
619template<typename genType> constexpr genType two_over_pi() { return 0.63661977236758134307553505349005744813783858296182; }
620
621// Exponentiations Pi
622template<typename genType> constexpr genType pi_sq() { return 9.86960440108935861883449099987615113531369940724079; }
623template<typename genType> constexpr genType pi_cb() { return 31.00627668029982017547631506710139520222528856588510; }
624template<typename genType> constexpr genType sqrt_pi() { return 1.77245385090551602729816748334114518279754945612238; }
625template<typename genType> constexpr genType one_over_sqrt_pi() { return 0.56418958354775628694807945156077258584405062932899; }
626template<typename genType> constexpr genType sqrt_two_pi() { return 1.77245385090551602729816748334114518279754945612238; }
627template<typename genType> constexpr genType one_over_sqrt_two_pi() { return 0.39894228040143267793994605993438186847585863116493; }
628template<typename genType> constexpr genType cbrt_pi() { return 1.46459188756152326302014252726379039173859685562793; }
629
630
631
632// e ===================================================================================================================
633
634// Multiples and Reciprocal
635template<typename genType> constexpr genType e() { return 2.71828182845904523536028747135266249775724709369995; }
636template<typename genType> constexpr genType half_e() { return 1.35914091422952261768014373567633124887862354684997; }
637template<typename genType> constexpr genType two_e() { return 5.43656365691809047072057494270532499551449418739991; }
638template<typename genType> constexpr genType one_over_e() { return 0.36787944117144232159552377016146086744581113103176; }
639
640// Exponentiations of e
641template<typename genType> constexpr genType e_sq() { return 7.38905609893065022723042746057500781318031557055184; }
642template<typename genType> constexpr genType e_cb() { return 20.08553692318766774092852965458171789698790783855415; }
643template<typename genType> constexpr genType sqrt_e() { return 1.64872127070012814684865078781416357165377610071014; }
644template<typename genType> constexpr genType one_over_sqrt_e() { return 0.60653065971263342360379953499118045344191813548718; }
645template<typename genType> constexpr genType e_raised_two() { return 7.38905609893065022723042746057500781318031557055184; }
646template<typename genType> constexpr genType e_raised_e() { return 15.15426224147926418976043027262991190552854853685613; }
647template<typename genType> constexpr genType e_raised_neg_e() { return 0.065988035845312537076790187596846424938577048252796; }
648
649// Exponentiations of e by Pi
650template<typename genType> constexpr genType e_raised_pi() { return 23.14069263277926900572908636794854738026610624260021; }
651template<typename genType> constexpr genType e_raised_neg_pi() { return 0.04321391826377224977441773717172801127572810981063; }
652template<typename genType> constexpr genType e_raised_half_pi() { return 4.81047738096535165547303566670383312639017087466453; }
653template<typename genType> constexpr genType e_raised_neg_half_pi() { return 0.20787957635076190854695561983497877003387784163176; }
654
655// Exponentiations of e by Gamma
656template<typename genType> constexpr genType e_raised_gamma() { return 1.78107241799019798523650410310717954916964521430343; }
657template<typename genType> constexpr genType e_raised_neg_gamma() { return 0.56145948356688516982414321479088078676571038692515; }
658
659
660
661// Catalan's Constant ==================================================================================================
662
663template<typename genType> constexpr genType G() { return 0.91596559417721901505460351493238411077414937428167; }
664template<typename genType> constexpr genType one_over_G() { return 1.09174406370390610145415947333389232498605012140824; }
665template<typename genType> constexpr genType G_over_pi() { return 0.29156090403081878013838445646839491886406615398583; }
666template<typename genType> constexpr genType pi_over_G() { return 3.42981513013245864263455323784799901211670795530093; }
667
668
669
670// Gamma ===============================================================================================================
671
672template<typename genType> constexpr genType y() { return 0.57721566490153286060651209008240243104215933593992; }
673template<typename genType> constexpr genType one_over_y() { return 1.73245471460063347358302531586082968115577655226680; }
674
675
676
677// Logarithms ==========================================================================================================
678
679template<typename genType> constexpr genType log_two() { return 0.69314718055994530941723212145817656807550013436025; }
680template<typename genType> constexpr genType log_three() { return 1.09861228866810969139524523692252570464749055782274; }
681template<typename genType> constexpr genType log_five() { return 1.60943791243410037460075933322618763952560135426851; }
682template<typename genType> constexpr genType log_seven() { return 1.94591014905531330510535274344317972963708472958186; }
683template<typename genType> constexpr genType log_ten() { return 2.30258509299404568401799145468436420760110148862877; }
684template<typename genType> constexpr genType one_over_log_ten() { return 0.43429448190325182765112891891660508229439700580366; }
685template<typename genType> constexpr genType log_two_over_log_three() { return 0.63092975357145743709952711434276085429958564013188; }
686template<typename genType> constexpr genType log_log_two() { return -0.36651292058166432701243915823266946945426344783711; }
687template<typename genType> constexpr genType log_pi() { return 1.14472988584940017414342735135305871164729481291531; }
688template<typename genType> constexpr genType log_sqrt_two() { return 0.91893853320467274178032973640561763986139747363778; }
689template<typename genType> constexpr genType log_gamma() { return -0.54953931298164482233766176880290778833069898126306; }
690template<typename genType> constexpr genType log_phi() { return 0.48121182505960344749775891342436842313518433438566; }
691
692}
693
694#endif // FENNEC_MATH_EXT_CONSTANTS_H
constexpr genType one_over_pi()
Definition constants.h:618
constexpr genType pi_sq()
Definition constants.h:622
constexpr genType one_over_y()
Definition constants.h:673
constexpr genType log_two_over_log_three()
Definition constants.h:685
constexpr genType three_halves_pi()
Definition constants.h:588
constexpr genType pi()
Definition constants.h:577
constexpr genType nine_fifths_pi()
Definition constants.h:607
constexpr genType five_quarters_pi()
Definition constants.h:597
constexpr genType log_sqrt_two()
Definition constants.h:688
constexpr genType y()
Definition constants.h:672
constexpr genType pi_over_G()
Definition constants.h:666
constexpr genType half_e()
Definition constants.h:636
constexpr genType three_over_two()
Definition constants.h:552
constexpr genType log_ten()
Definition constants.h:683
constexpr genType log_five()
Definition constants.h:681
constexpr genType one_over_sqrt_five()
Definition constants.h:567
constexpr genType two_e()
Definition constants.h:637
constexpr genType e_sq()
Definition constants.h:641
constexpr genType log_three()
Definition constants.h:680
constexpr genType one_over_sqrt_two()
Definition constants.h:565
constexpr genType log_two()
Definition constants.h:679
constexpr genType sqrt_ten()
Definition constants.h:564
constexpr genType three_fifths_pi()
Definition constants.h:602
constexpr genType four_pi()
Definition constants.h:583
constexpr genType e_raised_pi()
Definition constants.h:650
constexpr genType one_over_G()
Definition constants.h:664
constexpr genType sqrt_two_pi()
Definition constants.h:626
constexpr genType cbrt_pi()
Definition constants.h:628
constexpr genType sqrt_e()
Definition constants.h:643
constexpr genType one()
Definition constants.h:550
constexpr genType third_pi()
Definition constants.h:590
constexpr genType e_raised_neg_half_pi()
Definition constants.h:653
constexpr genType pi_cb()
Definition constants.h:623
constexpr genType G_over_pi()
Definition constants.h:665
constexpr genType one_over_sqrt_e()
Definition constants.h:644
constexpr genType two_thirds_pi()
Definition constants.h:591
constexpr genType log_phi()
Definition constants.h:690
constexpr genType log_log_two()
Definition constants.h:686
constexpr genType five_sixths_pi()
Definition constants.h:610
constexpr genType tau()
Definition constants.h:578
constexpr genType sqrt_two()
Definition constants.h:560
constexpr genType log_pi()
Definition constants.h:687
constexpr genType sixth_pi()
Definition constants.h:609
constexpr genType three_quarters_pi()
Definition constants.h:596
constexpr genType fifth_pi()
Definition constants.h:600
constexpr genType one_over_sqrt_three()
Definition constants.h:566
constexpr genType five_thirds_pi()
Definition constants.h:593
constexpr genType e_cb()
Definition constants.h:642
constexpr genType sqrt_pi()
Definition constants.h:624
constexpr genType e_raised_e()
Definition constants.h:646
constexpr genType e_raised_neg_e()
Definition constants.h:647
constexpr genType four_thirds_pi()
Definition constants.h:592
constexpr genType eight_fifths_pi()
Definition constants.h:606
constexpr genType e_raised_half_pi()
Definition constants.h:652
constexpr genType log_gamma()
Definition constants.h:689
constexpr genType e_raised_neg_gamma()
Definition constants.h:657
constexpr genType qdrt_two()
Definition constants.h:569
constexpr genType seven_sixths_pi()
Definition constants.h:611
constexpr genType two_over_pi()
Definition constants.h:619
constexpr genType zero()
Definition constants.h:549
constexpr genType e_raised_neg_pi()
Definition constants.h:651
constexpr genType two_fifths_pi()
Definition constants.h:601
constexpr genType e_raised_gamma()
Definition constants.h:656
constexpr genType one_over_sqrt_two_pi()
Definition constants.h:627
constexpr genType six_fifths_pi()
Definition constants.h:604
constexpr genType cbrt_two()
Definition constants.h:568
constexpr genType sqrt_seven()
Definition constants.h:563
constexpr genType eleven_sixths_pi()
Definition constants.h:612
constexpr genType sqrt_five()
Definition constants.h:562
constexpr genType sqrt_three()
Definition constants.h:561
constexpr genType seven_fifths_pi()
Definition constants.h:605
constexpr genType log_seven()
Definition constants.h:682
constexpr genType quarter_pi()
Definition constants.h:595
constexpr genType e_raised_two()
Definition constants.h:645
constexpr genType seven_quarters_pi()
Definition constants.h:598
constexpr genType one_half()
Definition constants.h:551
constexpr genType e()
Definition constants.h:635
constexpr genType one_over_sqrt_pi()
Definition constants.h:625
constexpr genType two_thirds()
Definition constants.h:559
constexpr genType four_fifths_pi()
Definition constants.h:603
constexpr genType three_pi()
Definition constants.h:582
constexpr genType two_pi()
Definition constants.h:581
constexpr genType two_raised_sqrt_two()
Definition constants.h:570
constexpr genType one_over_log_ten()
Definition constants.h:684
constexpr genType one_over_e()
Definition constants.h:638
constexpr genType one_third()
Definition constants.h:558
constexpr genType half_pi()
Definition constants.h:587