Rudiments
mathinlines.h
1#include <math.h>
2#include <tgmath.h>
3#undef remainder
4#undef floor
5#undef round
6
7inline
8int32_t math::absoluteValue(int32_t j) {
9 // FIXME: use abs on platforms where an int is 32 bits
10 return labs(j);
11}
12
13inline
14div_t math::divide(int32_t numer, int32_t denom) {
15 // FIXME: use div on platforms where an int is 32 bits
16 return ldiv(numer,denom);
17}
18
19inline
20int64_t math::absoluteValue(int64_t j) {
21 return llabs(j);
22}
23
24inline
25lldiv_t math::divide(int64_t numer, int64_t denom) {
26 return lldiv(numer,denom);
27}
28
29
30
31
32// float methods
33
34inline
35bool math::isFinite(float x) {
36 return isfinite(x);
37}
38
39inline
40bool math::isNormal(float x) {
41 return isnormal(x);
42}
43
44inline
45bool math::isSubNormal(float x) {
46 return (fpclassify(x)==FP_SUBNORMAL);
47}
48
49inline
50bool math::isNaN(float x) {
51 return isnan(x);
52}
53
54inline
55bool math::isInfinite(float x) {
56 return isinf(x);
57}
58
59inline
60bool math::isGreater(float x, float y) {
61 return isgreater(x,y);
62}
63
64inline
65bool math::isGreaterOrEqual(float x, float y) {
66 return isgreaterequal(x,y);
67}
68
69inline
70bool math::isLess(float x, float y) {
71 return isless(x,y);
72}
73
74inline
75bool math::isLessOrEqual(float x, float y) {
76 return islessequal(x,y);
77}
78
79inline
80bool math::isLessOrGreater(float x, float y) {
81 return islessgreater(x,y);
82}
83
84inline
85bool math::areNaN(float x, float y) {
86 return isunordered(x,y);
87}
88
89inline
90bool math::isSignBitSet(float x) {
91 return signbit(x);
92}
93
94inline
95float math::arcCosine(float x) {
96 return acosf(x);
97}
98
99inline
100float math::arcSine(float x) {
101 return asinf(x);
102}
103
104inline
105float math::arcTangent(float x) {
106 return atanf(x);
107}
108
109inline
110float math::arcTangent(float y, float x) {
111 return atan2f(y,x);
112}
113
114inline
115float math::cosine(float x) {
116 return cosf(x);
117}
118
119inline
120float math::sine(float x) {
121 return sinf(x);
122}
123
124inline
125float math::tangent(float x) {
126 return tanf(x);
127}
128
129inline
130float math::hyperbolicArcCosine(float x) {
131 return acoshf(x);
132}
133
134inline
135float math::hyperbolicArcSine(float x) {
136 return asinhf(x);
137}
138
139inline
140float math::hyperbolicArcTangent(float x) {
141 return atanhf(x);
142}
143
144inline
145float math::hyperbolicCosine(float x) {
146 return coshf(x);
147}
148
149inline
150float math::hyperbolicSine(float x) {
151 return sinhf(x);
152}
153
154inline
155float math::hyperbolicTangent(float x) {
156 return tanhf(x);
157}
158
159inline
160float math::naturalExponent(float x) {
161 return expf(x);
162}
163
164inline
165float math::normalize(float x, int32_t *exp) {
166 return frexpf(x,exp);
167}
168
169inline
170float math::naturalLog(float x) {
171 return logf(x);
172}
173
174inline
175float math::logBase10(float x) {
176 return log10f(x);
177}
178
179inline
180float math::naturalExponentMinusOne(float x) {
181 return expm1f(x);
182}
183
184inline
185float math::naturalLogPlusOne(float x) {
186 return log1pf(x);
187}
188
189inline
190float math::exponent(float x) {
191 return logbf(x);
192}
193
194inline
195float math::exponentBase2(float x) {
196 return exp2f(x);
197}
198
199inline
200float math::logBase2(float x) {
201 return log2f(x);
202}
203
204inline
205float math::power(float x, float y) {
206 return powf(x,y);
207}
208
209inline
210float math::squareRoot(float x) {
211 return sqrtf(x);
212}
213
214inline
215float math::hypotenuse(float x, float y) {
216 return hypotf(x,y);
217}
218
219inline
220float math::cubeRoot(float x) {
221 return cbrtf(x);
222}
223
224inline
225float math::ceiling(float x) {
226 return ceilf(x);
227}
228
229inline
230float math::absoluteValue(float x) {
231 return fabsf(x);
232}
233
234inline
235float math::floor(float x) {
236 return floorf(x);
237}
238
239inline
240float math::remainder(float x, float y) {
241 return fmodf(x,y);
242}
243
244inline
245float math::nearbyInteger(float x) {
246 return nearbyintf(x);
247}
248
249inline
250float math::round(float x) {
251 return roundf(x);
252}
253
254inline
255float math::truncate(float x) {
256 return truncf(x);
257}
258
259inline
260float math::remainder(float x, float y, int32_t *quo) {
261 return remquof(x,y,quo);
262}
263
264inline
265long math::roundToLong(float x) {
266 return lrintf(x);
267}
268
269inline
270int64_t math::roundToLongLong(float x) {
271 return llrintf(x);
272}
273
274inline
275long math::roundAwayFromZeroToLong(float x) {
276 return lroundf(x);
277}
278
279inline
280int64_t math::roundAwayFromZeroToLongLong(float x) {
281 return llroundf(x);
282}
283
284inline
285float math::copySignBit(float x, float y) {
286 return copysignf(x,y);
287}
288
289inline
290float math::errorFunction(float x) {
291 return erff(x);
292}
293
294inline
295float math::complementaryErrorFunction(float x) {
296 return erfcf(x);
297}
298
299inline
300float math::trueGamma(float x) {
301 return tgammaf(x);
302}
303
304inline
305float math::naturalLogGamma(float x) {
306 return lgammaf(x);
307}
308
309inline
310float math::roundInexact(float x) {
311 return rintf(x);
312}
313
314inline
315float math::nextAfter(float x, float y) {
316 return nextafterf(x,y);
317}
318
319inline
320float math::nextToward(float x, float y) {
321 return nexttowardf(x,y);
322}
323
324inline
325float math::scaleByRadixToPower(float x, float n) {
326 return scalbf(x,n);
327}
328
329inline
330float math::scaleByRadixToPower(float x, int32_t n) {
331 return scalbnf(x,n);
332}
333
334inline
335float math::scaleByRadixToPower(float x, long n) {
336 return scalblnf(x,n);
337}
338
339inline
340int32_t math::integralExponent(float x) {
341 return ilogbf(x);
342}
343
344inline
345float math::positiveDifference(float x, float y) {
346 return fdimf(x,y);
347}
348
349inline
350float math::larger(float x, float y) {
351 return fmaxf(x,y);
352}
353
354inline
355float math::smaller(float x, float y) {
356 return fminf(x,y);
357}
358
359inline
360float math::multiplyAndAdd(float x, float y, float z) {
361 return fmaf(x,y,z);
362}
363
364inline
365float math::argument(float complex z) {
366 return cargf(z);
367}
368
369inline
370float complex math::conjugate(float complex z) {
371 return conjf(z);
372}
373
374inline
375float complex math::project(float complex z) {
376 return cprojf(z);
377}
378
379inline
380float math::imaginary(float complex z) {
381 return cimagf(z);
382}
383
384inline
385float math::real(float complex z) {
386 return crealf(z);
387}
388
389
390
391// double methods
392
393inline
394bool math::isFinite(double x) {
395 return isfinite(x);
396}
397
398inline
399bool math::isNormal(double x) {
400 return isnormal(x);
401}
402
403inline
404bool math::isSubNormal(double x) {
405 return (fpclassify(x)==FP_SUBNORMAL);
406}
407
408inline
409bool math::isNaN(double x) {
410 return isnan(x);
411}
412
413inline
414bool math::isInfinite(double x) {
415 return isinf(x);
416}
417
418inline
419bool math::isGreater(double x, double y) {
420 return isgreater(x,y);
421}
422
423inline
424bool math::isGreaterOrEqual(double x, double y) {
425 return isgreaterequal(x,y);
426}
427
428inline
429bool math::isLess(double x, double y) {
430 return isless(x,y);
431}
432
433inline
434bool math::isLessOrEqual(double x, double y) {
435 return islessequal(x,y);
436}
437
438inline
439bool math::isLessOrGreater(double x, double y) {
440 return islessgreater(x,y);
441}
442
443inline
444bool math::areNaN(double x, double y) {
445 return isunordered(x,y);
446}
447
448inline
449bool math::isSignBitSet(double x) {
450 return signbit(x);
451}
452
453inline
454double math::arcCosine(double x) {
455 return acos(x);
456}
457
458inline
459double math::arcSine(double x) {
460 return asin(x);
461}
462
463inline
464double math::arcTangent(double x) {
465 return atan(x);
466}
467
468inline
469double math::arcTangent(double y, double x) {
470 return atan2(y,x);
471}
472
473inline
474double math::cosine(double x) {
475 return cos(x);
476}
477
478inline
479double math::sine(double x) {
480 return sin(x);
481}
482
483inline
484double math::tangent(double x) {
485 return tan(x);
486}
487
488inline
489double math::hyperbolicArcCosine(double x) {
490 return acosh(x);
491}
492
493inline
494double math::hyperbolicArcSine(double x) {
495 return asinh(x);
496}
497
498inline
499double math::hyperbolicArcTangent(double x) {
500 return atanh(x);
501}
502
503inline
504double math::hyperbolicCosine(double x) {
505 return cosh(x);
506}
507
508inline
509double math::hyperbolicSine(double x) {
510 return sinh(x);
511}
512
513inline
514double math::hyperbolicTangent(double x) {
515 return tanh(x);
516}
517
518inline
519double math::naturalExponent(double x) {
520 return exp(x);
521}
522
523inline
524double math::normalize(double x, int32_t *exp) {
525 return frexp(x,exp);
526}
527
528inline
529double math::naturalLog(double x) {
530 return log(x);
531}
532
533inline
534double math::logBase10(double x) {
535 return log10(x);
536}
537
538inline
539double math::naturalExponentMinusOne(double x) {
540 return expm1(x);
541}
542
543inline
544double math::naturalLogPlusOne(double x) {
545 return log1p(x);
546}
547
548inline
549double math::exponent(double x) {
550 return logb(x);
551}
552
553inline
554double math::exponentBase2(double x) {
555 return exp2(x);
556}
557
558inline
559double math::logBase2(double x) {
560 return log2(x);
561}
562
563inline
564double math::power(double x, double y) {
565 return pow(x,y);
566}
567
568inline
569double math::squareRoot(double x) {
570 return sqrt(x);
571}
572
573inline
574double math::hypotenuse(double x, double y) {
575 return hypot(x,y);
576}
577
578inline
579double math::cubeRoot(double x) {
580 return cbrt(x);
581}
582
583inline
584double math::ceiling(double x) {
585 return ceil(x);
586}
587
588inline
589double math::absoluteValue(double x) {
590 return fabs(x);
591}
592
593inline
594double math::floor(double x) {
595 return floor(x);
596}
597
598inline
599double math::remainder(double x, double y) {
600 return fmod(x,y);
601}
602
603inline
604double math::nearbyInteger(double x) {
605 return nearbyint(x);
606}
607
608inline
609double math::round(double x) {
610 return round(x);
611}
612
613inline
614double math::truncate(double x) {
615 return trunc(x);
616}
617
618inline
619double math::remainder(double x, double y, int32_t *quo) {
620 return remquo(x,y,quo);
621}
622
623inline
624long math::roundToLong(double x) {
625 return lrint(x);
626}
627
628inline
629int64_t math::roundToLongLong(double x) {
630 return llrint(x);
631}
632
633inline
634long math::roundAwayFromZeroToLong(double x) {
635 return lround(x);
636}
637
638inline
639int64_t math::roundAwayFromZeroToLongLong(double x) {
640 return llround(x);
641}
642
643inline
644double math::copySignBit(double x, double y) {
645 return copysign(x,y);
646}
647
648inline
649double math::errorFunction(double x) {
650 return erf(x);
651}
652
653inline
654double math::complementaryErrorFunction(double x) {
655 return erfc(x);
656}
657
658inline
659double math::trueGamma(double x) {
660 return tgamma(x);
661}
662
663inline
664double math::naturalLogGamma(double x) {
665 return lgamma(x);
666}
667
668inline
669double math::roundInexact(double x) {
670 return rint(x);
671}
672
673inline
674double math::nextAfter(double x, double y) {
675 return nextafter(x,y);
676}
677
678inline
679double math::nextToward(double x, double y) {
680 return nexttoward(x,y);
681}
682
683inline
684double math::scaleByRadixToPower(double x, double n) {
685 return scalb(x,n);
686}
687
688inline
689double math::scaleByRadixToPower(double x, int32_t n) {
690 return scalbn(x,n);
691}
692
693inline
694double math::scaleByRadixToPower(double x, long n) {
695 return scalbln(x,n);
696}
697
698inline
699int32_t math::integralExponent(double x) {
700 return ilogb(x);
701}
702
703inline
704double math::positiveDifference(double x, double y) {
705 return fdim(x,y);
706}
707
708inline
709double math::larger(double x, double y) {
710 return fmax(x,y);
711}
712
713inline
714double math::smaller(double x, double y) {
715 return fmin(x,y);
716}
717
718inline
719double math::multiplyAndAdd(double x, double y, double z) {
720 return fma(x,y,z);
721}
722
723inline
724double math::argument(double complex z) {
725 return carg(z);
726}
727
728inline
729double complex math::conjugate(double complex z) {
730 return conj(z);
731}
732
733inline
734double complex math::project(double complex z) {
735 return cproj(z);
736}
737
738inline
739double math::imaginary(double complex z) {
740 return cimag(z);
741}
742
743inline
744double math::real(double complex z) {
745 return creal(z);
746}
747
748
749// long double methods
750
751inline
752bool math::isFinite(long double x) {
753 return isfinite(x);
754}
755
756inline
757bool math::isNormal(long double x) {
758 return isnormal(x);
759}
760
761inline
762bool math::isSubNormal(long double x) {
763 return (fpclassify(x)==FP_SUBNORMAL);
764}
765
766inline
767bool math::isNaN(long double x) {
768 return isnan(x);
769}
770
771inline
772bool math::isInfinite(long double x) {
773 return isinf(x);
774}
775
776inline
777bool math::isGreater(long double x, long double y) {
778 return isgreater(x,y);
779}
780
781inline
782bool math::isGreaterOrEqual(long double x, long double y) {
783 return isgreaterequal(x,y);
784}
785
786inline
787bool math::isLess(long double x, long double y) {
788 return isless(x,y);
789}
790
791inline
792bool math::isLessOrEqual(long double x, long double y) {
793 return islessequal(x,y);
794}
795
796inline
797bool math::isLessOrGreater(long double x, long double y) {
798 return islessgreater(x,y);
799}
800
801inline
802bool math::areNaN(long double x, long double y) {
803 return isunordered(x,y);
804}
805
806inline
807bool math::isSignBitSet(long double x) {
808 return signbit(x);
809}
810
811inline
812long double math::arcCosine(long double x) {
813 return acosl(x);
814}
815
816inline
817long double math::arcSine(long double x) {
818 return asinl(x);
819}
820
821inline
822long double math::arcTangent(long double x) {
823 return atanl(x);
824}
825
826inline
827long double math::arcTangent(long double y, long double x) {
828 return atan2l(y,x);
829}
830
831inline
832long double math::cosine(long double x) {
833 return cosl(x);
834}
835
836inline
837long double math::sine(long double x) {
838 return sinl(x);
839}
840
841inline
842long double math::tangent(long double x) {
843 return tanl(x);
844}
845
846inline
847long double math::hyperbolicArcCosine(long double x) {
848 return acoshl(x);
849}
850
851inline
852long double math::hyperbolicArcSine(long double x) {
853 return asinhl(x);
854}
855
856inline
857long double math::hyperbolicArcTangent(long double x) {
858 return atanhl(x);
859}
860
861inline
862long double math::hyperbolicCosine(long double x) {
863 return coshl(x);
864}
865
866inline
867long double math::hyperbolicSine(long double x) {
868 return sinhl(x);
869}
870
871inline
872long double math::hyperbolicTangent(long double x) {
873 return tanhl(x);
874}
875
876inline
877long double math::naturalExponent(long double x) {
878 return expl(x);
879}
880
881inline
882long double math::normalize(long double x, int32_t *exp) {
883 return frexpl(x,exp);
884}
885
886inline
887long double math::naturalLog(long double x) {
888 return logl(x);
889}
890
891inline
892long double math::logBase10(long double x) {
893 return log10l(x);
894}
895
896inline
897long double math::naturalExponentMinusOne(long double x) {
898 return expm1l(x);
899}
900
901inline
902long double math::naturalLogPlusOne(long double x) {
903 return log1pl(x);
904}
905
906inline
907long double math::exponent(long double x) {
908 return logbl(x);
909}
910
911inline
912long double math::exponentBase2(long double x) {
913 return exp2l(x);
914}
915
916inline
917long double math::logBase2(long double x) {
918 return log2l(x);
919}
920
921inline
922long double math::power(long double x, long double y) {
923 return powl(x,y);
924}
925
926inline
927long double math::squareRoot(long double x) {
928 return sqrtl(x);
929}
930
931inline
932long double math::hypotenuse(long double x, long double y) {
933 return hypotl(x,y);
934}
935
936inline
937long double math::cubeRoot(long double x) {
938 return cbrtl(x);
939}
940
941inline
942long double math::ceiling(long double x) {
943 return ceill(x);
944}
945
946inline
947long double math::absoluteValue(long double x) {
948 return fabsl(x);
949}
950
951inline
952long double math::floor(long double x) {
953 return floorl(x);
954}
955
956inline
957long double math::remainder(long double x, long double y) {
958 return fmodl(x,y);
959}
960
961inline
962long double math::nearbyInteger(long double x) {
963 return nearbyintl(x);
964}
965
966inline
967long double math::round(long double x) {
968 return roundl(x);
969}
970
971inline
972long double math::truncate(long double x) {
973 return truncl(x);
974}
975
976inline
977long double math::remainder(long double x, long double y, int32_t *quo) {
978 return remquol(x,y,quo);
979}
980
981inline
982long math::roundToLong(long double x) {
983 return lrintl(x);
984}
985
986inline
987int64_t math::roundToLongLong(long double x) {
988 return llrintl(x);
989}
990
991inline
992long math::roundAwayFromZeroToLong(long double x) {
993 return lroundl(x);
994}
995
996inline
997int64_t math::roundAwayFromZeroToLongLong(long double x) {
998 return llroundl(x);
999}
1000
1001inline
1002long double math::copySignBit(long double x, long double y) {
1003 return copysignl(x,y);
1004}
1005
1006inline
1007long double math::errorFunction(long double x) {
1008 return erfl(x);
1009}
1010
1011inline
1012long double math::complementaryErrorFunction(long double x) {
1013 return erfcl(x);
1014}
1015
1016inline
1017long double math::trueGamma(long double x) {
1018 return tgammal(x);
1019}
1020
1021inline
1022long double math::naturalLogGamma(long double x) {
1023 return lgammal(x);
1024}
1025
1026inline
1027long double math::roundInexact(long double x) {
1028 return rintl(x);
1029}
1030
1031inline
1032long double math::nextAfter(long double x, long double y) {
1033 return nextafterl(x,y);
1034}
1035
1036inline
1037long double math::nextToward(long double x, long double y) {
1038 return nexttowardl(x,y);
1039}
1040
1041inline
1042long double math::scaleByRadixToPower(long double x,
1043 long double n) {
1044 return scalbl(x,n);
1045}
1046
1047inline
1048long double math::scaleByRadixToPower(long double x,
1049 int32_t n) {
1050 return scalbnl(x,n);
1051}
1052
1053inline
1054long double math::scaleByRadixToPower(long double x, long n) {
1055 return scalblnl(x,n);
1056}
1057
1058inline
1059int32_t math::integralExponent(long double x) {
1060 return ilogbl(x);
1061}
1062
1063inline
1064long double math::positiveDifference(long double x,
1065 long double y) {
1066 return fdiml(x,y);
1067}
1068
1069inline
1070long double math::larger(long double x, long double y) {
1071 return fmaxl(x,y);
1072}
1073
1074inline
1075long double math::smaller(long double x, long double y) {
1076 return fminl(x,y);
1077}
1078
1079inline
1080long double math::multiplyAndAdd(long double x, long double y, long double z) {
1081 return fmal(x,y,z);
1082}
1083
1084inline
1085long double math::argument(long double complex z) {
1086 return cargl(z);
1087}
1088
1089inline
1090long double complex math::conjugate(long double complex z) {
1091 return conjl(z);
1092}
1093
1094inline
1095long double complex math::project(long double complex z) {
1096 return cprojl(z);
1097}
1098
1099inline
1100long double math::imaginary(long double complex z) {
1101 return cimagl(z);
1102}
1103
1104inline
1105long double math::real(long double complex z) {
1106 return creall(z);
1107}
1108
1109inline
1110float math::loadExponent(float x, int32_t exp) {
1111 return ldexpf(x,exp);
1112}
1113
1114inline
1115double math::loadExponent(double x, int32_t exp) {
1116 return ldexp(x,exp);
1117}
1118
1119inline
1120long double math::loadExponent(long double x, int32_t exp) {
1121 return ldexpl(x,exp);
1122}
Definition avltree.h:11