2 * D header file for C99.
4 * $(C_HEADER_DESCRIPTION pubs.opengroup.org/onlinepubs/009695399/basedefs/_math.h.html, _math.h)
6 * Copyright: Copyright Sean Kelly 2005 - 2012.
7 * License: Distributed under the
8 * $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0).
9 * (See accompanying file LICENSE)
11 * Source: $(DRUNTIMESRC core/stdc/_math.d)
14 module core.stdc.math;
16 import core.stdc.config;
24 else version (WatchOS)
27 version (ARM) version = ARM_Any;
28 version (AArch64) version = ARM_Any;
29 version (HPPA) version = HPPA_Any;
30 version (MIPS32) version = MIPS_Any;
31 version (MIPS64) version = MIPS_Any;
32 version (PPC) version = PPC_Any;
33 version (PPC64) version = PPC_Any;
34 version (RISCV32) version = RISCV_Any;
35 version (RISCV64) version = RISCV_Any;
36 version (S390) version = IBMZ_Any;
37 version (SPARC) version = SPARC_Any;
38 version (SPARC64) version = SPARC_Any;
39 version (SystemZ) version = IBMZ_Any;
40 version (X86) version = X86_Any;
41 version (X86_64) version = X86_Any;
44 @trusted: // All functions here operate on floating point and integer values only.
51 alias double double_t;
54 enum double HUGE_VAL = double.infinity;
56 enum double HUGE_VALF = float.infinity;
58 enum double HUGE_VALL = real.infinity;
61 enum float INFINITY = float.infinity;
63 enum float NAN = float.nan;
68 enum int FP_ILOGB0 = -int.max;
70 enum int FP_ILOGBNAN = int.max;
75 enum int FP_ILOGB0 = -int.max;
77 enum int FP_ILOGBNAN = int.max;
79 else version (OpenBSD)
82 enum int FP_ILOGB0 = -int.max;
84 enum int FP_ILOGBNAN = int.max;
86 else version (DragonFlyBSD)
89 enum int FP_ILOGB0 = -int.max;
91 enum int FP_ILOGBNAN = int.max;
93 else version (Solaris)
96 enum int FP_ILOGB0 = -int.max;
98 enum int FP_ILOGBNAN = int.max;
100 else version (CRuntime_Bionic)
103 enum int FP_ILOGB0 = -int.max;
105 enum int FP_ILOGBNAN = int.max;
107 else version (CRuntime_UClibc)
112 enum int FP_ILOGB0 = int.min;
114 enum int FP_ILOGBNAN = int.min;
116 else version (X86_64)
119 enum int FP_ILOGB0 = int.min;
121 enum int FP_ILOGBNAN = int.min;
123 else version (MIPS32)
126 enum int FP_ILOGB0 = -int.max;
128 enum int FP_ILOGBNAN = int.max;
133 enum int FP_ILOGB0 = -int.max;
135 enum int FP_ILOGBNAN = int.max;
139 static assert(false, "Architecture not supported.");
142 else version (CRuntime_Glibc)
147 enum int FP_ILOGB0 = int.min;
149 enum int FP_ILOGBNAN = int.min;
151 else version (ARM_Any)
154 enum int FP_ILOGB0 = -int.max;
156 enum int FP_ILOGBNAN = int.max;
158 else version (HPPA_Any)
161 enum int FP_ILOGB0 = -int.max;
163 enum int FP_ILOGBNAN = int.max;
165 else version (MIPS_Any)
168 enum int FP_ILOGB0 = -int.max;
170 enum int FP_ILOGBNAN = int.max;
172 else version (PPC_Any)
175 enum int FP_ILOGB0 = -int.max;
177 enum int FP_ILOGBNAN = int.max;
179 else version (RISCV_Any)
182 enum int FP_ILOGB0 = -int.max;
184 enum int FP_ILOGBNAN = int.max;
186 else version (SPARC_Any)
189 enum int FP_ILOGB0 = -int.max;
191 enum int FP_ILOGBNAN = int.max;
193 else version (IBMZ_Any)
196 enum int FP_ILOGB0 = -int.max;
198 enum int FP_ILOGBNAN = int.max;
202 static assert(false, "Architecture not supported.");
208 enum int FP_ILOGB0 = int.min;
210 enum int FP_ILOGBNAN = int.min;
214 enum int MATH_ERRNO = 1;
216 enum int MATH_ERREXCEPT = 2;
218 enum int math_errhandling = MATH_ERRNO | MATH_ERREXCEPT;
223 // these functions are all macros in C
226 //int fpclassify(real-floating x);
227 pure int fpclassify(float x);
228 pure int fpclassify(double x);
229 pure int fpclassify(real x);
231 //int isfinite(real-floating x);
232 pure int isfinite(float x);
233 pure int isfinite(double x);
234 pure int isfinite(real x);
236 //int isinf(real-floating x);
237 pure int isinf(float x);
238 pure int isinf(double x);
239 pure int isinf(real x);
241 //int isnan(real-floating x);
242 pure int isnan(float x);
243 pure int isnan(double x);
244 pure int isnan(real x);
246 //int isnormal(real-floating x);
247 pure int isnormal(float x);
248 pure int isnormal(double x);
249 pure int isnormal(real x);
251 //int signbit(real-floating x);
252 pure int signbit(float x);
253 pure int signbit(double x);
254 pure int signbit(real x);
256 //int isgreater(real-floating x, real-floating y);
257 pure int isgreater(float x, float y);
258 pure int isgreater(double x, double y);
259 pure int isgreater(real x, real y);
261 //int isgreaterequal(real-floating x, real-floating y);
262 pure int isgreaterequal(float x, float y);
263 pure int isgreaterequal(double x, double y);
264 pure int isgreaterequal(real x, real y);
266 //int isless(real-floating x, real-floating y);
267 pure int isless(float x, float y);
268 pure int isless(double x, double y);
269 pure int isless(real x, real y);
271 //int islessequal(real-floating x, real-floating y);
272 pure int islessequal(float x, float y);
273 pure int islessequal(double x, double y);
274 pure int islessequal(real x, real y);
276 //int islessgreater(real-floating x, real-floating y);
277 pure int islessgreater(float x, float y);
278 pure int islessgreater(double x, double y);
279 pure int islessgreater(real x, real y);
281 //int isunordered(real-floating x, real-floating y);
282 pure int isunordered(float x, float y);
283 pure int isunordered(double x, double y);
284 pure int isunordered(real x, real y);
287 version (CRuntime_DigitalMars)
321 pure uint __fpclassify_f(float x);
322 pure uint __fpclassify_d(double x);
323 pure uint __fpclassify_ld(real x);
325 //int fpclassify(real-floating x);
327 pragma(mangle, "__fpclassify_f") pure int fpclassify(float x);
329 pragma(mangle, "__fpclassify_d") pure int fpclassify(double x);
331 pragma(mangle, real.sizeof == double.sizeof ? "__fpclassify_d" : "__fpclassify_ld")
332 pure int fpclassify(real x);
336 //int isfinite(real-floating x);
338 pure int isfinite(float x) { return fpclassify(x) >= FP_NORMAL; }
340 pure int isfinite(double x) { return fpclassify(x) >= FP_NORMAL; }
342 pure int isfinite(real x) { return fpclassify(x) >= FP_NORMAL; }
344 //int isinf(real-floating x);
346 pure int isinf(float x) { return fpclassify(x) == FP_INFINITE; }
348 pure int isinf(double x) { return fpclassify(x) == FP_INFINITE; }
350 pure int isinf(real x) { return fpclassify(x) == FP_INFINITE; }
352 //int isnan(real-floating x);
354 pure int isnan(float x) { return fpclassify(x) <= FP_NANQ; }
356 pure int isnan(double x) { return fpclassify(x) <= FP_NANQ; }
358 pure int isnan(real x) { return fpclassify(x) <= FP_NANQ; }
360 //int isnormal(real-floating x);
362 pure int isnormal(float x) { return fpclassify(x) == FP_NORMAL; }
364 pure int isnormal(double x) { return fpclassify(x) == FP_NORMAL; }
366 pure int isnormal(real x) { return fpclassify(x) == FP_NORMAL; }
368 //int signbit(real-floating x);
370 pure int signbit(float x) { return (cast(short*)&(x))[1] & 0x8000; }
372 pure int signbit(double x) { return (cast(short*)&(x))[3] & 0x8000; }
374 pure int signbit(real x)
376 return (real.sizeof == double.sizeof)
377 ? (cast(short*)&(x))[3] & 0x8000
378 : (cast(short*)&(x))[4] & 0x8000;
382 else version (CRuntime_Microsoft) // fully supported since MSVCRT 12 (VS 2013) only
384 version (all) // legacy stuff to be removed in the future
397 _FPCLASS_PINF = 0x200,
400 //deprecated("Please use the standard C99 function copysignf() instead.")
401 pure float _copysignf(float x, float s);
403 //deprecated("_chgsignf(x) is a non-standard MS extension. Please consider using -x instead.")
404 pure float _chgsignf(float x);
406 version (Win64) // not available in 32-bit runtimes
408 //deprecated("Please use the standard C99 function isfinite() instead.")
409 pure int _finitef(float x);
411 //deprecated("Please use the standard C99 function isnan() instead.")
412 pure int _isnanf(float x);
414 //deprecated("Please use the standard C99 function fpclassify() instead.")
415 pure int _fpclassf(float x);
418 //deprecated("Please use the standard C99 function copysign() instead.")
419 pure double _copysign(double x, double s);
421 //deprecated("_chgsign(x) is a non-standard MS extension. Please consider using -x instead.")
422 pure double _chgsign(double x);
424 //deprecated("Please use the standard C99 function isfinite() instead.")
425 pure int _finite(double x);
427 //deprecated("Please use the standard C99 function isnan() instead.")
428 pure int _isnan(double x);
430 //deprecated("Please use the standard C99 function fpclassify() instead.")
431 pure int _fpclass(double x);
443 FP_INFINITE = FP_NAN | FP_NORMAL,
447 FP_SUBNORMAL = FP_NORMAL | FP_ZERO
450 pure int __fpclassifyf(float x);
451 pure int __fpclassify(double x);
452 pure int __fpclassifyl(real x);
454 pure int __isnanf(float x);
455 pure int __isnan(double x);
456 pure int __isnanl(real x);
458 pure int __signbitf(float x);
459 pure int __signbit(double x);
460 pure int __signbitl(real x);
462 //int fpclassify(real-floating x);
464 pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
466 pragma(mangle, "__fpclassify") pure int fpclassify(double x);
468 pragma(mangle, real.sizeof == double.sizeof ? "__fpclassify" : "__fpclassifyl")
469 pure int fpclassify(real x);
473 //int isfinite(real-floating x);
475 pure int isfinite(float x) { return (fpclassify(x) & FP_NORMAL) == 0; }
477 pure int isfinite(double x) { return (fpclassify(x) & FP_NORMAL) == 0; }
479 pure int isfinite(real x) { return (fpclassify(x) & FP_NORMAL) == 0; }
481 //int isinf(real-floating x);
483 pure int isinf(float x) { return fpclassify(x) == FP_INFINITE; }
485 pure int isinf(double x) { return fpclassify(x) == FP_INFINITE; }
487 pure int isinf(real x) { return fpclassify(x) == FP_INFINITE; }
490 //int isnan(real-floating x);
492 pragma(mangle, "__isnanf") pure int isnan(float x);
494 pragma(mangle, "__isnan") pure int isnan(double x);
496 pragma(mangle, real.sizeof == double.sizeof ? "__isnan" : "__isnanl")
497 pure int isnan(real x);
501 //int isnormal(real-floating x);
503 int isnormal(float x) { return fpclassify(x) == FP_NORMAL; }
505 int isnormal(double x) { return fpclassify(x) == FP_NORMAL; }
507 int isnormal(real x) { return fpclassify(x) == FP_NORMAL; }
510 //int signbit(real-floating x);
512 pragma(mangle, "__signbitf") pure int signbit(float x);
514 pragma(mangle, "__signbit") pure int signbit(double x);
516 pragma(mangle, real.sizeof == double.sizeof ? "__signbit" : "__signbitl")
537 //int fpclassify(real-floating x);
539 extern(C) pragma(mangle, "_fdclass") pure int fpclassify(float x);
541 extern(C) pragma(mangle, "_dclass") pure int fpclassify(double x);
543 pure int fpclassify()(real x)
545 static if (real.sizeof == double.sizeof)
546 return fpclassify(cast(double) x);
548 static assert(false, "fpclassify(real) not supported by MS C runtime");
551 //int isfinite(real-floating x);
553 pure int isfinite()(float x) { return fpclassify(x) <= 0; }
555 pure int isfinite()(double x) { return fpclassify(x) <= 0; }
557 pure int isfinite()(real x) { return fpclassify(x) <= 0; }
559 //int isinf(real-floating x);
561 pure int isinf()(float x) { return fpclassify(x) == FP_INFINITE; }
563 pure int isinf()(double x) { return fpclassify(x) == FP_INFINITE; }
565 pure int isinf()(real x) { return fpclassify(x) == FP_INFINITE; }
567 //int isnan(real-floating x);
568 version (none) // requires MSVCRT 12+ (VS 2013)
571 pure int isnan(float x) { return fpclassify(x) == FP_NAN; }
573 pure int isnan(double x) { return fpclassify(x) == FP_NAN; }
575 pure int isnan(real x) { return fpclassify(x) == FP_NAN; }
577 else // for backward compatibility with older runtimes
580 pure int isnan(float x) { version (Win64) return _isnanf(x); else return _isnan(cast(double) x); }
582 extern(C) pragma(mangle, "_isnan") pure int isnan(double x);
584 pure int isnan(real x) { return _isnan(cast(double) x); }
587 //int isnormal(real-floating x);
589 pure int isnormal()(float x) { return fpclassify(x) == FP_NORMAL; }
591 pure int isnormal()(double x) { return fpclassify(x) == FP_NORMAL; }
593 pure int isnormal()(real x) { return fpclassify(x) == FP_NORMAL; }
595 //int signbit(real-floating x);
597 extern(C) pragma(mangle, "_fdsign") pure int signbit(float x);
599 extern(C) pragma(mangle, "_dsign") pure int signbit(double x);
601 pure int signbit()(real x)
603 static if (real.sizeof == double.sizeof)
604 return signbit(cast(double) x);
606 return (cast(short*)&(x))[4] & 0x8000;
611 else version (CRuntime_Glibc)
637 pure int __fpclassifyf(float x);
638 pure int __fpclassify(double x);
639 pure int __fpclassifyl(real x);
641 pure int __finitef(float x);
642 pure int __finite(double x);
643 pure int __finitel(real x);
645 pure int __isinff(float x);
646 pure int __isinf(double x);
647 pure int __isinfl(real x);
649 pure int __isnanf(float x);
650 pure int __isnan(double x);
651 pure int __isnanl(real x);
653 pure int __signbitf(float x);
654 pure int __signbit(double x);
655 pure int __signbitl(real x);
657 //int fpclassify(real-floating x);
659 pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
661 pragma(mangle, "__fpclassify") pure int fpclassify(double x);
663 pragma(mangle, real.sizeof == double.sizeof ? "__fpclassify" : "__fpclassifyl")
664 pure int fpclassify(real x);
666 //int isfinite(real-floating x);
668 pragma(mangle, "__finitef") pure int isfinite(float x);
670 pragma(mangle, "__finite") pure int isfinite(double x);
672 pragma(mangle, real.sizeof == double.sizeof ? "__finite" : "__finitel")
673 pure int isfinite(real x);
675 //int isinf(real-floating x);
677 pragma(mangle, "__isinff") pure int isinf(float x);
679 pragma(mangle, "__isinf") pure int isinf(double x);
681 pragma(mangle, real.sizeof == double.sizeof ? "__isinf" : "__isinfl")
682 pure int isinf(real x);
684 //int isnan(real-floating x);
686 pragma(mangle, "__isnanf") pure int isnan(float x);
688 pragma(mangle, "__isnan") pure int isnan(double x);
690 pragma(mangle, real.sizeof == double.sizeof ? "__isnan" : "__isnanl")
691 pure int isnan(real x);
693 //int isnormal(real-floating x);
695 extern (D) pure int isnormal(float x) { return fpclassify(x) == FP_NORMAL; }
697 extern (D) pure int isnormal(double x) { return fpclassify(x) == FP_NORMAL; }
699 extern (D) pure int isnormal(real x) { return fpclassify(x) == FP_NORMAL; }
701 //int signbit(real-floating x);
703 pragma(mangle, "__signbitf") pure int signbit(float x);
705 pragma(mangle, "__signbit") pure int signbit(double x);
707 pragma(mangle, real.sizeof == double.sizeof ? "__signbit" : "__signbitl")
708 pure int signbit(real x);
710 else version (CRuntime_Musl)
737 int __fpclassifyf(float x);
738 int __fpclassify(double x);
739 int __fpclassifyl(real x);
741 int __signbitf(float x);
742 int __signbit(double x);
743 int __signbitl(real x);
746 //int fpclassify(real-floating x);
748 pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
750 pragma(mangle, "__fpclassify") pure int fpclassify(double x);
752 pragma(mangle, real.sizeof == double.sizeof ? "__fpclassify" : "__fpclassifyl")
753 pure int fpclassify(real x);
756 private uint __FLOAT_BITS(float __f)
766 private ulong __DOUBLE_BITS(double __f)
777 //int isfinite(real-floating x);
779 int isfinite(float x) { return (__FLOAT_BITS(x) & 0x7fffffff) < 0x7f800000; }
781 int isfinite(double x) { return (__DOUBLE_BITS(x) & -1UL>>1) < 0x7ffUL<<52; }
785 return (real.sizeof == double.sizeof)
786 ? isfinite(cast(double)x)
787 : __fpclassifyl(x) > FP_INFINITE;
790 //int isinf(real-floating x);
792 int isinf(float x) { return (__FLOAT_BITS(x) & 0x7fffffff) == 0x7f800000; }
794 int isinf(double x) { return (__DOUBLE_BITS(x) & -1UL>>1) == 0x7ffUL<<52; }
798 return (real.sizeof == double.sizeof)
799 ? isinf(cast(double)x)
800 : __fpclassifyl(x) == FP_INFINITE;
803 //int isnan(real-floating x);
805 int isnan(float x) { return (__FLOAT_BITS(x) & 0x7fffffff) > 0x7f800000; }
807 int isnan(double x) { return (__DOUBLE_BITS(x) & -1UL>>1) > 0x7ffUL<<52; }
811 return (real.sizeof == double.sizeof)
812 ? isnan(cast(double)x)
813 : __fpclassifyl(x) == FP_NAN;
816 //int isnormal(real-floating x);
818 int isnormal(float x) { return fpclassify(x) == FP_NORMAL; }
820 int isnormal(double x) { return fpclassify(x) == FP_NORMAL; }
822 int isnormal(real x) { return fpclassify(x) == FP_NORMAL; }
825 //int signbit(real-floating x);
827 pragma(mangle, "__signbitf") pure int signbit(float x);
829 pragma(mangle, "__signbit") pure int signbit(double x);
831 pragma(mangle, real.sizeof == double.sizeof ? "__signbit" : "__signbitl")
832 pure int signbit(real x);
834 else version (CRuntime_UClibc)
860 pure int __fpclassifyf(float x);
861 pure int __fpclassify(double x);
862 pure int __fpclassifyl(real x);
864 pure int __finitef(float x);
865 pure int __finite(double x);
866 pure int __finitel(real x);
868 pure int __isinff(float x);
869 pure int __isinf(double x);
870 pure int __isinfl(real x);
872 pure int __isnanf(float x);
873 pure int __isnan(double x);
874 pure int __isnanl(real x);
876 pure int __signbitf(float x);
877 pure int __signbit(double x);
878 pure int __signbitl(real x);
881 pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
883 pragma(mangle, "__fpclassify") pure int fpclassify(double x);
885 pragma(mangle, real.sizeof == double.sizeof ? "__fpclassify" : "__fpclassifyl")
886 pure int fpclassify(real x);
889 pragma(mangle, "__finitef") pure int isfinite(float x);
891 pragma(mangle, "__finite") pure int isfinite(double x);
893 pragma(mangle, real.sizeof == double.sizeof ? "__finite" : "__finitel")
894 pure int isfinite(real x);
897 pragma(mangle, "__isinff") pure int isinf(float x);
899 pragma(mangle, "__isinf") pure int isinf(double x);
901 pragma(mangle, real.sizeof == double.sizeof ? "__isinf" : "__isinfl")
902 pure int isinf(real x);
905 pragma(mangle, "__isnanf") pure int isnan(float x);
907 pragma(mangle, "__isnan") pure int isnan(double x);
909 pragma(mangle, real.sizeof == double.sizeof ? "__isnan" : "__isnanl")
910 pure int isnan(real x);
915 int isnormal(float x) { return fpclassify(x) == FP_NORMAL; }
917 int isnormal(double x) { return fpclassify(x) == FP_NORMAL; }
919 int isnormal(real x) { return fpclassify(x) == FP_NORMAL; }
923 pragma(mangle, "__signbitf") pure int signbit(float x);
925 pragma(mangle, "__signbit") pure int signbit(double x);
927 pragma(mangle, real.sizeof == double.sizeof ? "__signbit" : "__signbitl")
928 pure int signbit(real x);
930 else version (Darwin)
956 pure int __fpclassifyf(float x);
957 pure int __fpclassifyd(double x);
959 pure int __isfinitef(float x);
960 pure int __isfinited(double x);
962 pure int __isinff(float x);
963 pure int __isinfd(double x);
965 pure int __isnanf(float x);
966 pure int __isnand(double x);
968 // __isnormal family exists, but iOS implementation returns wrong results
971 pure int __signbitf(float x);
972 pure int __signbitd(double x);
973 pure int __signbitl(real x);
975 // Support of OSX < 10.8 needs legacy function names without "l" suffix
976 // with exception of __signbitl. Otherwise could use else version like
982 // Available in macOS ARM
983 pure int __fpclassifyl(real x);
984 pure int __isfinitel(real x);
985 pure int __isinfl(real x);
986 pure int __isnanl(real x);
990 pure int __fpclassify(real x);
991 pure int __isfinite(real x);
992 pure int __isinf(real x);
993 pure int __isnan(real x);
994 alias __fpclassifyl = __fpclassify;
995 alias __isfinitel = __isfinite;
996 alias __isinfl = __isinf;
997 alias __isnanl = __isnan;
1002 // Available OSX >= 10.8, iOS >= 6.0, all TVOS and WatchOS
1003 pure int __fpclassifyl(real x);
1004 pure int __isfinitel(real x);
1005 pure int __isinfl(real x);
1006 pure int __isnanl(real x);
1009 //int fpclassify(real-floating x);
1011 pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
1013 pragma(mangle, "__fpclassifyd") pure int fpclassify(double x);
1015 pragma(mangle, __fpclassifyl.mangleof) pure int fpclassify(real x);
1017 //int isfinite(real-floating x);
1019 pragma(mangle, "__isfinitef") pure int isfinite(float x);
1021 pragma(mangle, "__isfinited") pure int isfinite(double x);
1023 pragma(mangle, __isfinitel.mangleof) pure int isfinite(real x);
1025 //int isinf(real-floating x);
1027 pragma(mangle, "__isinff") pure int isinf(float x);
1029 pragma(mangle, "__isinfd") pure int isinf(double x);
1031 pragma(mangle, __isinfl.mangleof) pure int isinf(real x);
1033 //int isnan(real-floating x);
1035 pragma(mangle, "__isnanf") pure int isnan(float x);
1037 pragma(mangle, "__isnand") pure int isnan(double x);
1039 pragma(mangle, __isnanl.mangleof) pure int isnan(real x);
1043 //int isnormal(real-floating x);
1045 pure int isnormal(float x) { return fpclassify(x) == FP_NORMAL; }
1047 pure int isnormal(double x) { return fpclassify(x) == FP_NORMAL; }
1049 pure int isnormal(real x) { return fpclassify(x) == FP_NORMAL; }
1052 //int signbit(real-floating x);
1054 pragma(mangle, "__signbitf") pure int signbit(float x);
1056 pragma(mangle, "__signbitd") pure int signbit(double x);
1058 pragma(mangle, "__signbitl") pure int signbit(real x);
1060 else version (FreeBSD)
1071 FP_SUBNORMAL = 0x08,
1086 pure int __fpclassifyd(double);
1087 pure int __fpclassifyf(float);
1088 pure int __fpclassifyl(real);
1089 pure int __isfinitef(float);
1090 pure int __isfinite(double);
1091 pure int __isfinitel(real);
1092 pure int __isinff(float);
1093 pure int __isinfl(real);
1094 pure int __isnanl(real);
1095 pure int __isnormalf(float);
1096 pure int __isnormal(double);
1097 pure int __isnormall(real);
1098 pure int __signbit(double);
1099 pure int __signbitf(float);
1100 pure int __signbitl(real);
1102 //int fpclassify(real-floating x);
1104 pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
1106 pragma(mangle, "__fpclassifyd") pure int fpclassify(double x);
1108 pragma(mangle, "__fpclassifyl") pure int fpclassify(real x);
1110 //int isfinite(real-floating x);
1112 pragma(mangle, "__isfinitef") pure int isfinite(float x);
1114 pragma(mangle, "__isfinite") pure int isfinite(double x);
1116 pragma(mangle, "__isfinitel") pure int isfinite(real x);
1118 //int isinf(real-floating x);
1120 pragma(mangle, "__isinff") pure int isinf(float x);
1122 extern (D) pure int isinf(double x) { return __isinfl(x); }
1124 pragma(mangle, "__isinfl") pure int isinf(real x);
1126 //int isnan(real-floating x);
1128 extern (D) pure int isnan(float x) { return __isnanl(x); }
1130 extern (D) pure int isnan(double x) { return __isnanl(x); }
1132 pragma(mangle, "__isnanl") pure int isnan(real x);
1134 //int isnormal(real-floating x);
1136 pragma(mangle, "__isnormalf") pure int isnormal(float x);
1138 pragma(mangle, "__isnormal") pure int isnormal(double x);
1140 pragma(mangle, "__isnormall") pure int isnormal(real x);
1142 //int signbit(real-floating x);
1144 pragma(mangle, "__signbitf") pure int signbit(float x);
1146 pragma(mangle, "__signbit") pure int signbit(double x);
1148 extern (D) pure int signbit(real x) { return __signbit(x); }
1150 else version (OpenBSD)
1161 FP_SUBNORMAL = 0x08,
1176 pure int __fpclassify(double);
1177 pure int __fpclassifyf(float);
1178 pure int __fpclassifyl(real);
1179 pure int __isfinitef(float);
1180 pure int __isfinite(double);
1181 pure int __isfinitel(real);
1182 pure int __isinff(float);
1183 pure int __isinfl(real);
1184 pure int __isnanl(real);
1185 pure int __isnormalf(float);
1186 pure int __isnormal(double);
1187 pure int __isnormall(real);
1188 pure int __signbit(double);
1189 pure int __signbitf(float);
1190 pure int __signbitl(real);
1192 //int fpclassify(real-floating x);
1194 pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
1196 pragma(mangle, "__fpclassify") pure int fpclassify(double x);
1198 pragma(mangle, "__fpclassifyl") pure int fpclassify(real x);
1200 //int isfinite(real-floating x);
1202 pragma(mangle, "__isfinitef") pure int isfinite(float x);
1204 pragma(mangle, "__isfinite") pure int isfinite(double x);
1206 pragma(mangle, "__isfinitel") pure int isfinite(real x);
1208 //int isinf(real-floating x);
1210 pragma(mangle, "__isinff") pure int isinf(float x);
1212 extern (D) pure int isinf(double x) { return __isinfl(x); }
1214 pragma(mangle, "__isinfl") pure int isinf(real x);
1216 //int isnan(real-floating x);
1218 extern (D) pure int isnan(float x) { return __isnanl(x); }
1220 extern (D) pure int isnan(double x) { return __isnanl(x); }
1222 pragma(mangle, "__isnanl") pure int isnan(real x);
1224 //int isnormal(real-floating x);
1226 pragma(mangle, "__isnormalf") pure int isnormal(float x);
1228 pragma(mangle, "__isnormal") pure int isnormal(double x);
1230 pragma(mangle, "__isnormall") pure int isnormal(real x);
1232 //int signbit(real-floating x);
1234 pragma(mangle, "__signbitf") pure int signbit(float x);
1236 pragma(mangle, "__signbit") pure int signbit(double x);
1238 extern (D) pure int signbit(real x) { return __signbit(x); }
1240 else version (NetBSD)
1266 pure uint __fpclassifyf(float x);
1267 pure uint __fpclassifyd(double x);
1268 pure uint __fpclassifyl(real x);
1270 //int fpclassify(real-floating x);
1272 pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
1274 pragma(mangle, "__fpclassifyd") pure int fpclassify(double x);
1276 pragma(mangle, real.sizeof == double.sizeof ? "__fpclassifyd" : "__fpclassifyl")
1277 pure int fpclassify(real x);
1281 //int isfinite(real-floating x);
1283 pure int isfinite(float x) { return fpclassify(x) >= FP_NORMAL; }
1285 pure int isfinite(double x) { return fpclassify(x) >= FP_NORMAL; }
1287 pure int isfinite(real x) { return fpclassify(x) >= FP_NORMAL; }
1289 //int isinf(real-floating x);
1291 pure int isinf(float x) { return fpclassify(x) == FP_INFINITE; }
1293 pure int isinf(double x) { return fpclassify(x) == FP_INFINITE; }
1295 pure int isinf(real x) { return fpclassify(x) == FP_INFINITE; }
1297 //int isnan(real-floating x);
1299 pure int isnan(float x) { return fpclassify(x) == FP_NAN; }
1301 pure int isnan(double x) { return fpclassify(x) == FP_NAN; }
1303 pure int isnan(real x) { return fpclassify(x) == FP_NAN; }
1305 //int isnormal(real-floating x);
1307 pure int isnormal(float x) { return fpclassify(x) == FP_NORMAL; }
1309 pure int isnormal(double x) { return fpclassify(x) == FP_NORMAL; }
1311 pure int isnormal(real x) { return fpclassify(x) == FP_NORMAL; }
1313 //int signbit(real-floating x);
1315 pure int signbit(float x) { return (cast(short*)&(x))[1] & 0x8000; }
1317 pure int signbit(double x) { return (cast(short*)&(x))[3] & 0x8000; }
1319 pure int signbit(real x)
1321 return (real.sizeof == double.sizeof)
1322 ? (cast(short*)&(x))[3] & 0x8000
1323 : (cast(short*)&(x))[4] & 0x8000;
1327 else version (DragonFlyBSD)
1334 FP_SUBNORMAL = 0x08,
1339 * /usr/include/math.h : martynas@openbsd believes only F version is true.
1340 enum FP_FAST_FMA = 1;
1341 enum FP_FAST_FMAL = 1;
1343 enum FP_FAST_FMAF = 1;
1345 pure int __fpclassifyd(double);
1346 pure int __fpclassifyf(float);
1347 pure int __fpclassifyl(real);
1348 pure int __isfinitef(float);
1349 pure int __isfinite(double);
1350 pure int __isfinitel(real);
1351 pure int __isinff(float);
1352 pure int __isinf(double);
1353 pure int __isinfl(real);
1354 pure int __isnanf(float);
1355 pure int __isnan(double);
1356 pure int __isnanl(real);
1357 pure int __isnormalf(float);
1358 pure int __isnormal(double);
1359 pure int __isnormall(real);
1360 pure int __signbit(double);
1361 pure int __signbitf(float);
1362 pure int __signbitl(real);
1364 pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
1365 pragma(mangle, "__fpclassifyd") pure int fpclassify(double x);
1366 pragma(mangle, "__fpclassifyl") pure int fpclassify(real x);
1368 pragma(mangle, "__isfinitef") pure int isfinite(float x);
1369 pragma(mangle, "__isfinite") pure int isfinite(double x);
1370 pragma(mangle, "__isfinitel") pure int isfinite(real x);
1372 pragma(mangle, "__isinff") pure int isinf(float x);
1373 pragma(mangle, "__isinf") pure int isinf(double x);
1374 pragma(mangle, "__isinfl") pure int isinf(real x);
1376 pragma(mangle, "__isnanf") pure int isnan(float x);
1377 pragma(mangle, "__isnan") pure int isnan(double x);
1378 pragma(mangle, "__isnanl") pure int isnan(real x);
1380 pragma(mangle, "__isnormalf") pure int isnormal(float x);
1381 pragma(mangle, "__isnormal") pure int isnormal(double x);
1382 pragma(mangle, "__isnormall") pure int isnormal(real x);
1384 pragma(mangle, "__signbitf") pure int signbit(float x);
1385 pragma(mangle, "__signbit") pure int signbit(double x);
1386 pragma(mangle, "__signbitl") pure int signbit(real x);
1388 else version (Solaris)
1411 //int fpclassify(real-floating x);
1413 pure int fpclassify(float x)
1415 return isnan(x) ? FP_NAN : isinf(x) ? FP_INFINITE :
1416 isnormal(x) ? FP_NORMAL : x == 0.0f ? FP_ZERO :
1421 pure int fpclassify(double x)
1423 return isnan(x) ? FP_NAN : isinf(x) ? FP_INFINITE :
1424 isnormal(x) ? FP_NORMAL : x == 0.0 ? FP_ZERO :
1429 pure int fpclassify(real x)
1431 return isnan(x) ? FP_NAN : isinf(x) ? FP_INFINITE :
1432 isnormal(x) ? FP_NORMAL : x == 0.0L ? FP_ZERO :
1436 //int isfinite(real-floating x);
1438 pure int isfinite(float x) { return !isnan(x) && !isinf(x); }
1440 pure int isfinite(double x) { return !isnan(x) && !isinf(x); }
1442 pure int isfinite(real x) { return !isnan(x) && !isinf(x); }
1444 //int isinf(real-floating x);
1446 pure int isinf(float x) { return x == float.infinity || x == -float.infinity; }
1448 pure int isinf(double x) { return x == double.infinity || x == -double.infinity; }
1450 pure int isinf(real x) { return x == real.infinity || x == -real.infinity; }
1452 //int isnan(real-floating x);
1454 pure int isnan(float x) { return x != x; }
1456 pure int isnan(double x) { return x != x; }
1458 pure int isnan(real x) { return x != x; }
1460 //int isnormal(real-floating x);
1462 pure int isnormal(float x)
1465 return isfinite(x) && fabs(x) >= float.min_normal;
1468 pure int isnormal(double x)
1471 return isfinite(x) && fabs(x) >= double.min_normal;
1474 pure int isnormal(real x)
1477 return isfinite(x) && fabs(x) >= real.min_normal;
1480 //int signbit(real-floating x);
1482 pure int signbit(float x)
1485 return cast(int)(*cast(uint*)&x >> 31);
1486 else version (X86_Any)
1487 return cast(int)(*cast(uint*)&x >> 31);
1489 static assert(false, "Architecture not supported.");
1492 pure int signbit(double x)
1495 return cast(int)(*cast(uint*)&x >> 31);
1496 else version (X86_Any)
1497 return cast(int)((cast(uint*)&x)[1] >> 31);
1499 static assert(false, "Architecture not supported.");
1502 pure int signbit(real x)
1505 return cast(int)(*cast(uint*)&x >> 31);
1506 else version (X86_Any)
1507 return cast(int)((cast(ushort *)&x)[4] >> 15);
1509 static assert(false, "Architecture not supported.");
1513 else version (CRuntime_Bionic)
1524 FP_SUBNORMAL = 0x08,
1532 pure int __fpclassifyd(double);
1533 pure int __fpclassifyf(float);
1534 pure int __fpclassifyl(real);
1536 pure int __isfinitef(float);
1537 pure int __isfinite(double);
1538 pure int __isfinitel(real);
1540 pure int __isinff(float);
1541 pure int __isinf(double);
1542 pure int __isinfl(real);
1544 pure int isnanf(float);
1545 pure int isnan(double);
1546 pure int __isnanl(real);
1548 pure int __isnormalf(float);
1549 pure int __isnormal(double);
1550 pure int __isnormall(real);
1552 pure int __signbit(double);
1553 pure int __signbitf(float);
1554 pure int __signbitl(real);
1556 //int fpclassify(real-floating x);
1558 pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
1560 pragma(mangle, "__fpclassifyd") pure int fpclassify(double x);
1562 pragma(mangle, "__fpclassifyl") pure int fpclassify(real x);
1564 //int isfinite(real-floating x);
1566 pragma(mangle, "__isfinitef") pure int isfinite(float x);
1568 pragma(mangle, "__isfinite") pure int isfinite(double x);
1570 pragma(mangle, "__isfinitel") pure int isfinite(real x);
1572 //int isinf(real-floating x);
1574 pragma(mangle, "__isinff") pure int isinf(float x);
1576 pragma(mangle, "__isinf") pure int isinf(double x);
1578 pragma(mangle, "__isinfl") pure int isinf(real x);
1580 //int isnan(real-floating x);
1582 pragma(mangle, "isnanf") pure int isnan(float x);
1584 pragma(mangle, "__isnanl") pure int isnan(real x);
1586 //int isnormal(real-floating x);
1588 pragma(mangle, "__isnormalf") pure int isnormal(float x);
1590 pragma(mangle, "__isnormal") pure int isnormal(double x);
1592 pragma(mangle, "__isnormall") pure int isnormal(real x);
1594 //int signbit(real-floating x);
1596 pragma(mangle, "__signbitf") pure int signbit(float x);
1598 pragma(mangle, "__signbit") pure int signbit(double x);
1600 pragma(mangle, "__signbitl") pure int signbit(real x);
1605 //int isgreater(real-floating x, real-floating y);
1607 pure int isgreater(float x, float y) { return x > y; }
1609 pure int isgreater(double x, double y) { return x > y; }
1611 pure int isgreater(real x, real y) { return x > y; }
1613 //int isgreaterequal(real-floating x, real-floating y);
1615 pure int isgreaterequal(float x, float y) { return x >= y; }
1617 pure int isgreaterequal(double x, double y) { return x >= y; }
1619 pure int isgreaterequal(real x, real y) { return x >= y; }
1621 //int isless(real-floating x, real-floating y);
1623 pure int isless(float x, float y) { return x < y; }
1625 pure int isless(double x, double y) { return x < y; }
1627 pure int isless(real x, real y) { return x < y; }
1629 //int islessequal(real-floating x, real-floating y);
1631 pure int islessequal(float x, float y) { return x <= y; }
1633 pure int islessequal(double x, double y) { return x <= y; }
1635 pure int islessequal(real x, real y) { return x <= y; }
1637 //int islessgreater(real-floating x, real-floating y);
1639 pure int islessgreater(float x, float y) { return x != y && !isunordered(x, y); }
1641 pure int islessgreater(double x, double y) { return x != y && !isunordered(x, y); }
1643 pure int islessgreater(real x, real y) { return x != y && !isunordered(x, y); }
1645 //int isunordered(real-floating x, real-floating y);
1647 pure int isunordered(float x, float y) { return isnan(x) || isnan(y); }
1649 pure int isunordered(double x, double y) { return isnan(x) || isnan(y); }
1651 pure int isunordered(real x, real y) { return isnan(x) || isnan(y); }
1654 /* MS define some functions inline.
1655 * Additionally, their *l functions work with a 64-bit long double and are thus
1656 * useless for 80-bit D reals. So we use our own wrapper implementations working
1657 * internally with reduced 64-bit precision.
1658 * This also enables relaxing real to 64-bit double.
1660 version (CRuntime_Microsoft) // fully supported since MSVCRT 12 (VS 2013) only
1663 double acos(double x);
1665 float acosf(float x);
1667 extern(D) real acosl()(real x) { return acos(cast(double) x); }
1670 double asin(double x);
1672 float asinf(float x);
1674 extern(D) real asinl()(real x) { return asin(cast(double) x); }
1677 pure double atan(double x);
1679 pure float atanf(float x);
1681 pure extern(D) real atanl()(real x) { return atan(cast(double) x); }
1684 double atan2(double y, double x);
1686 float atan2f(float y, float x);
1688 extern(D) real atan2l()(real y, real x) { return atan2(cast(double) y, cast(double) x); }
1691 pure double cos(double x);
1693 pure float cosf(float x);
1695 extern(D) pure real cosl()(real x) { return cos(cast(double) x); }
1698 pure double sin(double x);
1700 pure float sinf(float x);
1702 extern(D) pure real sinl()(real x) { return sin(cast(double) x); }
1705 pure double tan(double x);
1707 pure float tanf(float x);
1709 extern(D) pure real tanl()(real x) { return tan(cast(double) x); }
1712 double acosh(double x);
1714 float acoshf(float x);
1716 extern(D) real acoshl()(real x) { return acosh(cast(double) x); }
1719 pure double asinh(double x);
1721 pure float asinhf(float x);
1723 pure extern(D) real asinhl()(real x) { return asinh(cast(double) x); }
1726 double atanh(double x);
1728 float atanhf(float x);
1730 extern(D) real atanhl()(real x) { return atanh(cast(double) x); }
1733 double cosh(double x);
1735 float coshf(float x);
1737 extern(D) real coshl()(real x) { return cosh(cast(double) x); }
1740 double sinh(double x);
1742 float sinhf(float x);
1744 extern(D) real sinhl()(real x) { return sinh(cast(double) x); }
1747 pure double tanh(double x);
1749 pure float tanhf(float x);
1751 extern(D) pure real tanhl()(real x) { return tanh(cast(double) x); }
1754 double exp(double x);
1756 float expf(float x);
1758 extern(D) real expl()(real x) { return exp(cast(double) x); }
1761 double exp2(double x);
1763 float exp2f(float x);
1765 extern(D) real exp2l()(real x) { return exp2(cast(double) x); }
1768 double expm1(double x);
1770 float expm1f(float x);
1772 extern(D) real expm1l()(real x) { return expm1(cast(double) x); }
1775 pure double frexp(double value, int* exp);
1777 extern(D) pure float frexpf()(float value, int* exp) { return cast(float) frexp(value, exp); }
1779 extern(D) pure real frexpl()(real value, int* exp) { return frexp(cast(double) value, exp); }
1782 int ilogb(double x);
1784 int ilogbf(float x);
1786 extern(D) int ilogbl()(real x) { return ilogb(cast(double) x); }
1789 double ldexp(double x, int exp);
1791 extern(D) float ldexpf()(float x, int exp) { return cast(float) ldexp(x, exp); }
1793 extern(D) real ldexpl()(real x, int exp) { return ldexp(cast(double) x, exp); }
1796 double log(double x);
1798 float logf(float x);
1800 extern(D) real logl()(real x) { return log(cast(double) x); }
1803 double log10(double x);
1805 float log10f(float x);
1807 extern(D) real log10l()(real x) { return log10(cast(double) x); }
1810 double log1p(double x);
1812 float log1pf(float x);
1814 extern(D) real log1pl()(real x) { return log1p(cast(double) x); }
1817 double log2(double x);
1819 float log2f(float x);
1821 extern(D) real log2l()(real x) { return log2(cast(double) x); }
1824 double logb(double x);
1826 float logbf(float x);
1828 extern(D) real logbl()(real x) { return logb(cast(double) x); }
1831 pure double modf(double value, double* iptr);
1833 pure float modff(float value, float* iptr);
1835 extern(D) pure real modfl()(real value, real* iptr)
1838 double r = modf(cast(double) value, &i);
1844 double scalbn(double x, int n);
1846 float scalbnf(float x, int n);
1848 extern(D) real scalbnl()(real x, int n) { return scalbn(cast(double) x, n); }
1851 double scalbln(double x, c_long n);
1853 float scalblnf(float x, c_long n);
1855 extern(D) real scalblnl()(real x, c_long n) { return scalbln(cast(double) x, n); }
1858 pure double cbrt(double x);
1860 pure float cbrtf(float x);
1862 extern(D) pure real cbrtl()(real x) { return cbrt(cast(double) x); }
1865 pure double fabs(double x);
1867 extern(D) pure float fabsf()(float x) { return cast(float) fabs(x); }
1869 extern(D) pure real fabsl()(real x) { return fabs(cast(double) x); }
1872 extern(C) pragma(mangle, "_hypot") double hypot(double x, double y);
1874 extern(C) pragma(mangle, "_hypotf") float hypotf(float x, float y);
1876 extern(D) real hypotl(real x, real y) { return hypot(cast(double) x, cast(double) y); }
1879 double pow(double x, double y);
1881 float powf(float x, float y);
1883 extern(D) real powl()(real x, real y) { return pow(cast(double) x, cast(double) y); }
1886 double sqrt(double x);
1888 float sqrtf(float x);
1890 extern(D) real sqrtl()(real x) { return sqrt(cast(double) x); }
1893 pure double erf(double x);
1895 pure float erff(float x);
1897 extern(D) pure real erfl()(real x) { return erf(cast(double) x); }
1900 double erfc(double x);
1902 float erfcf(float x);
1904 extern(D) real erfcl()(real x) { return erfc(cast(double) x); }
1907 double lgamma(double x);
1909 float lgammaf(float x);
1911 extern(D) real lgammal()(real x) { return lgamma(cast(double) x); }
1914 double tgamma(double x);
1916 float tgammaf(float x);
1918 extern(D) real tgammal()(real x) { return tgamma(cast(double) x); }
1921 pure double ceil(double x);
1923 pure float ceilf(float x);
1925 extern(D) pure real ceill()(real x) { return ceil(cast(double) x); }
1928 pure double floor(double x);
1930 pure float floorf(float x);
1932 extern(D) pure real floorl()(real x) { return floor(cast(double) x); }
1935 pure double nearbyint(double x);
1937 pure float nearbyintf(float x);
1939 extern(D) pure real nearbyintl()(real x) { return nearbyint(cast(double) x); }
1942 pure double rint(double x);
1944 pure float rintf(float x);
1946 extern(D) pure real rintl()(real x) { return rint(cast(double) x); }
1949 c_long lrint(double x);
1951 c_long lrintf(float x);
1953 extern(D) c_long lrintl()(real x) { return lrint(cast(double) x); }
1956 long llrint(double x);
1958 long llrintf(float x);
1960 extern(D) long llrintl()(real x) { return llrint(cast(double) x); }
1963 pure double round(double x);
1965 pure float roundf(float x);
1967 extern(D) pure real roundl()(real x) { return round(cast(double) x); }
1970 c_long lround(double x);
1972 c_long lroundf(float x);
1974 extern(D) c_long lroundl()(real x) { return lround(cast(double) x); }
1977 long llround(double x);
1979 long llroundf(float x);
1981 extern(D) long llroundl()(real x) { return llround(cast(double) x); }
1984 pure double trunc(double x);
1986 pure float truncf(float x);
1988 extern(D) pure real truncl()(real x) { return trunc(cast(double) x); }
1991 double fmod(double x, double y);
1993 float fmodf(float x, float y);
1995 extern(D) real fmodl()(real x, real y) { return fmod(cast(double) x, cast(double) y); }
1998 double remainder(double x, double y);
2000 float remainderf(float x, float y);
2002 extern(D) real remainderl()(real x, real y) { return remainder(cast(double) x, cast(double) y); }
2005 double remquo(double x, double y, int* quo);
2007 float remquof(float x, float y, int* quo);
2009 extern(D) real remquol()(real x, real y, int* quo) { return remquo(cast(double) x, cast(double) y, quo); }
2012 pure double copysign(double x, double y);
2014 pure float copysignf(float x, float y);
2016 extern(D) pure real copysignl()(real x, real y) { return copysign(cast(double) x, cast(double) y); }
2019 pure double nan(char* tagp);
2021 pure float nanf(char* tagp);
2023 extern(D) pure real nanl()(char* tagp) { return nan(tagp); }
2026 double nextafter(double x, double y);
2028 float nextafterf(float x, float y);
2030 extern(D) real nextafterl()(real x, real y) { return nextafter(cast(double) x, cast(double) y); }
2033 double nexttoward(double x, real y);
2035 float nexttowardf(float x, real y);
2037 extern(D) real nexttowardl()(real x, real y) { return nexttoward(cast(double) x, cast(double) y); }
2040 double fdim(double x, double y);
2042 float fdimf(float x, float y);
2044 extern(D) real fdiml()(real x, real y) { return fdim(cast(double) x, cast(double) y); }
2047 pure double fmax(double x, double y);
2049 pure float fmaxf(float x, float y);
2051 extern(D) pure real fmaxl()(real x, real y) { return fmax(cast(double) x, cast(double) y); }
2054 pure double fmin(double x, double y);
2056 pure float fminf(float x, float y);
2058 extern(D) pure real fminl()(real x, real y) { return fmin(cast(double) x, cast(double) y); }
2061 pure double fma(double x, double y, double z);
2063 pure float fmaf(float x, float y, float z);
2065 extern(D) pure real fmal()(real x, real y, real z) { return fma(cast(double) x, cast(double) y, cast(double) z); }
2067 else version (FreeBSD)
2070 double acos(double x);
2072 float acosf(float x);
2074 real acosl(real x); // since 8.0
2077 double asin(double x);
2079 float asinf(float x);
2081 real asinl(real x); // since 8.0
2084 pure double atan(double x);
2086 pure float atanf(float x);
2088 pure real atanl(real x); // since 8.0
2091 double atan2(double y, double x);
2093 float atan2f(float y, float x);
2095 real atan2l(real y, real x); // since 8.0
2098 pure double cos(double x);
2100 pure float cosf(float x);
2102 pure real cosl(real x); // since 8.0
2105 pure double sin(double x);
2107 pure float sinf(float x);
2109 pure real sinl(real x); // since 8.0
2112 pure double tan(double x);
2114 pure float tanf(float x);
2116 pure real tanl(real x); // since 8.0
2119 double acosh(double x);
2121 float acoshf(float x);
2123 real acoshl(real x); // since 10.0
2126 pure double asinh(double x);
2128 pure float asinhf(float x);
2130 pure real asinhl(real x); // since 10.0
2133 double atanh(double x);
2135 float atanhf(float x);
2137 real atanhl(real x); // since 10.0
2140 double cosh(double x);
2142 float coshf(float x);
2144 real coshl(real x); // since 10.1
2147 double sinh(double x);
2149 float sinhf(float x);
2151 real sinhl(real x); // since 10.1
2154 pure double tanh(double x);
2156 pure float tanhf(float x);
2158 pure real tanhl(real x); // since 10.1
2161 double exp(double x);
2163 float expf(float x);
2165 real expl(real x); // since 10.0
2168 double exp2(double x);
2170 float exp2f(float x);
2172 real exp2l(real x); // since 8.0
2175 double expm1(double x);
2177 float expm1f(float x);
2179 real expm1l(real x); // since 10.0
2182 pure double frexp(double value, int* exp);
2184 pure float frexpf(float value, int* exp);
2186 pure real frexpl(real value, int* exp); // since 6.0
2189 int ilogb(double x);
2191 int ilogbf(float x);
2193 int ilogbl(real x); // since 5.4
2196 double ldexp(double x, int exp);
2198 float ldexpf(float x, int exp);
2200 real ldexpl(real x, int exp); // since 6.0
2203 double log(double x);
2205 float logf(float x);
2207 real logl(real x); // since 10.0
2210 double log10(double x);
2212 float log10f(float x);
2214 real log10l(real x); // since 10.0
2217 double log1p(double x);
2219 float log1pf(float x);
2221 real log1pl(real x); // since 10.0
2224 double log2(double x); // since 8.3
2226 float log2f(float x); // since 8.3
2228 real log2l(real x); // since 10.0
2231 double logb(double x);
2233 float logbf(float x);
2235 real logbl(real x); // since 8.0
2238 pure double modf(double value, double* iptr);
2240 pure float modff(float value, float* iptr);
2242 pure real modfl(real value, real *iptr); // since 8.0
2245 double scalbn(double x, int n);
2247 float scalbnf(float x, int n);
2249 real scalbnl(real x, int n); // since 6.0
2252 double scalbln(double x, c_long n);
2254 float scalblnf(float x, c_long n);
2256 real scalblnl(real x, c_long n); // since 6.0
2259 pure double cbrt(double x);
2261 pure float cbrtf(float x);
2263 pure real cbrtl(real x); // since 9.0
2266 pure double fabs(double x);
2268 pure float fabsf(float x);
2270 pure real fabsl(real x); // since 5.3
2273 double hypot(double x, double y);
2275 float hypotf(float x, float y);
2277 real hypotl(real x, real y); // since 8.0
2280 double pow(double x, double y);
2282 float powf(float x, float y);
2284 real powl(real x, real y); // since 10.4
2287 double sqrt(double x);
2289 float sqrtf(float x);
2291 real sqrtl(real x); // since 8.0
2294 pure double erf(double x);
2296 pure float erff(float x);
2298 pure real erfl(real x); // since 10.1
2301 double erfc(double x);
2303 float erfcf(float x);
2305 real erfcl(real x); // since 10.1
2308 double lgamma(double x);
2310 float lgammaf(float x);
2312 real lgammal(real x); // since 10.2
2315 double tgamma(double x);
2317 float tgammaf(float x);
2319 real tgammal(real x); // since 11.2
2322 pure double ceil(double x);
2324 pure float ceilf(float x);
2326 pure real ceill(real x); // since 5.4
2329 pure double floor(double x);
2331 pure float floorf(float x);
2333 pure real floorl(real x); // since 5.4
2336 pure double nearbyint(double x);
2338 pure float nearbyintf(float x);
2340 pure real nearbyintl(real x); // since 8.0
2343 pure double rint(double x);
2345 pure float rintf(float x);
2347 pure real rintl(real x); // since 8.0
2350 c_long lrint(double x);
2352 c_long lrintf(float x);
2354 c_long lrintl(real x); // since 8.0
2357 long llrint(double x);
2359 long llrintf(float x);
2361 long llrintl(real x); // since 8.0
2364 pure double round(double x);
2366 pure float roundf(float x);
2368 pure real roundl(real x); // since 6.0
2371 c_long lround(double x);
2373 c_long lroundf(float x);
2375 c_long lroundl(real x); // since 6.0
2378 long llround(double x);
2380 long llroundf(float x);
2382 long llroundl(real x); // since 6.0
2385 pure double trunc(double x);
2387 pure float truncf(float x);
2389 pure real truncl(real x); // since 6.0
2392 double fmod(double x, double y);
2394 float fmodf(float x, float y);
2396 real fmodl(real x, real y); // since 8.0
2399 double remainder(double x, double y);
2401 float remainderf(float x, float y);
2403 real remainderl(real x, real y); // since 8.0
2406 double remquo(double x, double y, int* quo);
2408 float remquof(float x, float y, int* quo);
2410 real remquol(real x, real y, int* quo); // since 8.0
2413 pure double copysign(double x, double y);
2415 pure float copysignf(float x, float y);
2417 pure real copysignl(real x, real y); // since 5.3
2420 pure double nan(const char*); // since 8.0
2422 pure float nanf(const char*); // since 8.0
2424 pure real nanl(const char*); // since 8.0
2427 double nextafter(double x, double y);
2429 float nextafterf(float x, float y);
2431 real nextafterl(real x, real y); // since 6.0
2434 double nexttoward(double x, real y);
2436 float nexttowardf(float x, real y);
2438 real nexttowardl(real x, real y); // since 6.0
2441 double fdim(double x, double y);
2443 float fdimf(float x, float y);
2445 real fdiml(real x, real y); // since 5.3
2448 pure double fmax(double x, double y);
2450 pure float fmaxf(float x, float y);
2452 pure real fmaxl(real x, real y); // since 5.3
2455 pure double fmin(double x, double y);
2457 pure float fminf(float x, float y);
2459 pure real fminl(real x, real y); // since 5.3
2462 pure double fma(double x, double y, double z);
2464 pure float fmaf(float x, float y, float z);
2466 pure real fmal(real x, real y, real z); // since 6.0
2468 else version (NetBSD)
2476 pure real atanl(real x);
2478 real atan2l(real y, real x);
2480 pure real cosl(real x);
2482 pure real sinl(real x);
2484 pure real tanl(real x);
2488 pure real frexpl(real value, int* exp);
2492 real ldexpl(real x, int exp);
2496 pure real modfl(real value, real *iptr);
2498 real scalbnl(real x, int n);
2500 real scalblnl(real x, c_long n);
2502 pure real fabsl(real x);
2504 real hypotl(real x, real y);
2508 pure real ceill(real x);
2510 pure real floorl(real x);
2512 pure real nearbyintl(real x);
2514 pure real rintl(real x);
2516 extern(D) c_long lrintl(real x) { return cast(c_long)rintl(x); }
2518 pure real roundl(real x);
2520 extern(D) c_long lroundl(real x) { return cast(c_long)roundl(x);}
2522 extern(D) long llroundl(real x) { return cast(long)roundl(x);}
2524 pure real truncl(real x);
2526 real fmodl(real x, real y);
2528 real remainderl(real x, real y) { return remainder(x,y); }
2530 real remquol(real x, real y, int* quo){ return remquo(x,y,quo); }
2532 pure real copysignl(real x, real y);
2534 pure double nan(char* tagp);
2536 pure float nanf(char* tagp);
2538 pure real nanl(char* tagp);
2540 real nextafterl(real x, real y);
2542 extern(D) real nexttowardl(real x, real y) { return nexttoward(cast(double) x, cast(double) y); }
2544 real fdiml(real x, real y);
2546 pure real fmaxl(real x, real y);
2548 pure real fminl(real x, real y);
2550 pure real fmal(real x, real y, real z);
2553 double acos(double x);
2555 float acosf(float x);
2558 double asin(double x);
2560 float asinf(float x);
2563 pure double atan(double x);
2565 pure float atanf(float x);
2568 double atan2(double y, double x);
2570 float atan2f(float y, float x);
2573 pure double cos(double x);
2575 pure float cosf(float x);
2578 pure double sin(double x);
2580 pure float sinf(float x);
2583 pure double tan(double x);
2585 pure float tanf(float x);
2588 double acosh(double x);
2590 float acoshf(float x);
2592 real acoshl(real x);
2595 pure double asinh(double x);
2597 pure float asinhf(float x);
2599 pure real asinhl(real x);
2602 double atanh(double x);
2604 float atanhf(float x);
2606 real atanhl(real x);
2609 double cosh(double x);
2611 float coshf(float x);
2616 double sinh(double x);
2618 float sinhf(float x);
2623 pure double tanh(double x);
2625 pure float tanhf(float x);
2627 pure real tanhl(real x);
2630 double exp(double x);
2632 float expf(float x);
2637 double exp2(double x);
2639 float exp2f(float x);
2642 double expm1(double x);
2644 float expm1f(float x);
2646 real expm1l(real x) { return expm1(cast(double) x); }
2649 pure double frexp(double value, int* exp);
2651 pure float frexpf(float value, int* exp);
2654 int ilogb(double x);
2656 int ilogbf(float x);
2659 double ldexp(double x, int exp);
2661 float ldexpf(float x, int exp);
2664 double log(double x);
2666 float logf(float x);
2667 /// NetBSD has no logl. It is just alias log(double)
2670 if (x<0) return real.nan;
2671 if (x==0) return -real.infinity;
2672 if (isnan(x) || isinf(x)) return x;
2676 immutable MAX = log(double.max);
2677 for (; x>double.max; x /= double.max)
2680 else if (x<double.min_normal)
2682 immutable MIN = log(double.min_normal);
2683 for (; x<double.min_normal; x /= double.min_normal)
2691 double log10(double x);
2693 float log10f(float x);
2694 ///NetBSD has no log10l. It is just alias log(double)
2697 if (x<0) return real.nan;
2698 if (x==0) return -real.infinity;
2699 if (isnan(x) || isinf(x)) return x;
2704 immutable MAX = log10(double.max);
2705 for (; x>double.max; x /= double.max)
2708 else if (x<double.min_normal)
2710 immutable MIN = log10(double.min_normal);
2711 for (; x<double.min_normal; x /= double.min_normal)
2720 double log1p(double x);
2722 float log1pf(float x);
2724 extern(D) real log1pl(real x) { return log1p(cast(double) x); }
2726 private enum real ONE_LN2 = 1 / 0x1.62e42fefa39ef358p-1L;
2728 extern(D) double log2(double x) { return log(x) * ONE_LN2; }
2730 extern(D) float log2f(float x) { return logf(x) * ONE_LN2; }
2732 real log2l(real x) { return logl(x) * ONE_LN2; }
2735 double logb(double x);
2737 float logbf(float x);
2740 pure double modf(double value, double* iptr);
2742 pure float modff(float value, float* iptr);
2745 double scalbn(double x, int n);
2747 float scalbnf(float x, int n);
2750 double scalbln(double x, c_long n);
2752 float scalblnf(float x, c_long n);
2755 pure double cbrt(double x);
2757 pure float cbrtf(float x);
2759 pure real cbrtl(real x);
2762 pure double fabs(double x);
2764 pure float fabsf(float x);
2767 double hypot(double x, double y);
2769 float hypotf(float x, float y);
2772 double pow(double x, double y);
2774 float powf(float x, float y);
2776 real powl(real x, real y);
2779 double sqrt(double x);
2781 float sqrtf(float x);
2784 pure double erf(double x);
2786 pure float erff(float x);
2788 extern(D) pure real erfl(real x) { return erf(cast(double) x); }
2791 double erfc(double x);
2793 float erfcf(float x);
2795 real erfcl(real x) { return erfc(cast(double) x); }
2798 double lgamma(double x);
2800 float lgammaf(float x);
2802 real lgammal(real x){ return lgamma(x); }
2805 double tgamma(double x);
2807 float tgammaf(float x);
2809 real tgammal(real x){ return tgamma(cast(double) x); }
2812 pure double ceil(double x);
2814 pure float ceilf(float x);
2817 pure double floor(double x);
2819 pure float floorf(float x);
2822 pure double nearbyint(double x);
2824 pure float nearbyintf(float x);
2827 pure double rint(double x);
2829 pure float rintf(float x);
2832 c_long lrint(double x);
2834 c_long lrintf(float x);
2837 long llrint(double x);
2839 long llrintf(float x);
2841 extern(D) long llrintl(real x) { return cast(long)rintl(x); }
2844 pure double round(double x);
2846 pure float roundf(float x);
2849 c_long lround(double x);
2851 c_long lroundf(float x);
2854 long llround(double x);
2856 long llroundf(float x);
2859 pure double trunc(double x);
2861 pure float truncf(float x);
2864 double fmod(double x, double y);
2866 float fmodf(float x, float y);
2869 double remainder(double x, double y);
2871 float remainderf(float x, float y);
2874 double remquo(double x, double y, int* quo);
2876 float remquof(float x, float y, int* quo);
2879 pure double copysign(double x, double y);
2881 pure float copysignf(float x, float y);
2884 double nextafter(double x, double y);
2886 float nextafterf(float x, float y);
2889 double nexttoward(double x, real y);
2891 float nexttowardf(float x, real y);
2894 double fdim(double x, double y);
2896 float fdimf(float x, float y);
2899 pure double fmax(double x, double y);
2901 pure float fmaxf(float x, float y);
2904 pure double fmin(double x, double y);
2906 pure float fminf(float x, float y);
2909 pure double fma(double x, double y, double z);
2911 pure float fmaf(float x, float y, float z);
2913 else version (OpenBSD)
2916 double acos(double x);
2918 double asin(double x);
2920 pure double atan(double x);
2922 double atan2(double, double);
2924 pure double cos(double x);
2926 pure double sin(double x);
2928 pure double tan(double x);
2930 double cosh(double x);
2932 double sinh(double x);
2934 pure double tanh(double x);
2936 double exp(double x);
2938 pure double frexp(double, int *exp);
2940 double ldexp(double, int exp);
2942 double log(double x);
2944 double log10(double x);
2946 pure double modf(double x, double *iptr);
2948 double pow(double x, double y);
2950 double sqrt(double x);
2952 pure double ceil(double x);
2954 pure double fabs(double x);
2956 pure double floor(double x);
2958 double fmod(double x, double);
2960 double acosh(double x);
2962 pure double asinh(double x);
2964 double atanh(double x);
2966 double exp2(double x);
2968 double expm1(double x);
2970 int ilogb(double x);
2972 double log1p(double x);
2974 double log2(double x);
2976 double logb(double x);
2978 double scalbn(double x, int n);
2980 double scalbln(double x, c_long n);
2982 pure double cbrt(double x);
2984 double hypot(double x, double y);
2986 pure double erf(double x);
2988 double erfc(double x);
2990 double lgamma(double x);
2992 double tgamma(double x);
2994 pure double nearbyint(double x);
2996 pure double rint(double x);
2998 c_long lrint(double x);
3000 long llrint(double x);
3002 pure double round(double x);
3004 c_long lround(double x);
3006 long llround(double x);
3008 pure double trunc(double x);
3010 double remainder(double x , double y);
3012 double remquo(double x, double y, int * quo);
3014 pure double copysign(double x, double y);
3016 pure double nan(const char *);
3018 double nextafter(double x, double y);
3020 double nexttoward(double x, real y);
3022 double fdim(double x, double y);
3024 pure double fmax(double x, double y);
3026 pure double fmin(double x, double y);
3028 pure double fma(double x, double y, double z);
3030 double j0(double x);
3032 double j1(double x);
3034 double jn(int, double);
3036 double y0(double x);
3038 double y1(double x);
3040 double yn(int, double);
3042 double gamma(double x);
3044 double scalb(double x, double y);
3046 double drem(double x, double y);
3048 int finite(double x);
3050 double gamma_r(double x, int *);
3052 double lgamma_r(double x, int *);
3054 double significand(double x);
3057 float acosf(float x);
3059 float asinf(float x);
3061 pure float atanf(float x);
3063 float atan2f(float x, float y);
3065 pure float cosf(float x);
3067 pure float sinf(float x);
3069 pure float tanf(float x);
3071 float acoshf(float x);
3073 pure float asinhf(float x);
3075 float atanhf(float x);
3077 float coshf(float x);
3079 float sinhf(float x);
3081 pure float tanhf(float x);
3083 float expf(float x);
3085 float exp2f(float x);
3087 float expm1f(float x);
3089 pure float frexpf(float x, int *exp);
3091 int ilogbf(float x);
3093 float ldexpf(float x, int exp);
3095 float logf(float x);
3097 float log10f(float x);
3099 float log1pf(float x);
3101 float log2f(float x);
3103 float logbf(float x);
3105 pure float modff(float x, float *iptr);
3107 float scalbnf(float x, int y);
3109 float scalblnf(float x, c_long y);
3111 pure float cbrtf(float x);
3113 pure float fabsf(float x);
3115 float hypotf(float x, float y);
3117 float powf(float x, float y);
3119 float sqrtf(float x);
3121 pure float erff(float x);
3123 float erfcf(float x);
3125 float lgammaf(float x);
3127 float tgammaf(float x);
3129 pure float ceilf(float x);
3131 pure float floorf(float x);
3133 pure float nearbyintf(float x);
3135 pure float rintf(float x);
3137 c_long lrintf(float x);
3139 long llrintf(float x);
3141 pure float roundf(float x);
3143 c_long lroundf(float x);
3145 long llroundf(float x);
3147 pure float truncf(float x);
3149 pure float fmodf(float x, float y);
3151 float remainderf(float x, float y);
3153 float remquof(float x, float y, int *iptr);
3155 pure float copysignf(float x, float y);
3157 pure float nanf(const char *);
3159 float nextafterf(float x, float y);
3161 float nexttowardf(float x, real y);
3163 float fdimf(float x, float y);
3165 pure float fmaxf(float x, float y);
3167 pure float fminf(float x, float y);
3169 pure float fmaf(float x, float y, float z);
3175 float jnf(int, float);
3177 float scalbf(float x, float);
3183 float ynf(int, float);
3185 float gammaf(float x);
3187 float dremf(float x, float);
3189 pure int finitef(float x);
3191 pure int isinff(float x);
3193 pure int isnanf(float x);
3195 float gammaf_r(float x, int *);
3197 float lgammaf_r(float x, int *);
3199 float significandf(float x);
3203 pure real acosl(real x);
3205 pure real asinl(real x);
3207 pure real atanl(real x);
3209 real atan2l(real y, real x);
3211 pure real cosl(real x);
3213 pure real sinl(real x);
3215 pure real tanl(real x);
3217 real acoshl(real x);
3219 pure real asinhl(real x);
3221 real atanhl(real x);
3227 pure real tanhl(real x);
3233 real expm1l(real x);
3235 pure real frexpl(real x, int *exp);
3239 real ldexpl(real x, int exp);
3243 real log10l(real x);
3245 real log1pl(real x);
3251 pure real modfl(real x, real *iptr);
3253 real scalbnl(real x, int y);
3255 real scalblnl(real x, c_long y);
3257 pure real cbrtl(real x);
3259 pure real fabsl(real x);
3261 real hypotl(real x, real y);
3263 real powl(real x, real y);
3267 pure real erfl(real x);
3271 real lgammal(real x);
3273 real tgammal(real x);
3275 pure real ceill(real x);
3277 pure real floorl(real x);
3279 pure real nearbyintl(real x);
3281 pure real rintl(real x);
3283 c_long lrintl(real x);
3285 long llrintl(real x);
3287 pure real roundl(real x);
3289 c_long lroundl(real x);
3291 long llroundl(real x);
3293 pure real truncl(real x);
3295 pure real fmodl(real x, real);
3297 pure real remainderl(real x, real);
3299 pure real remquol(real x, real y, int *iptr);
3301 pure real copysignl(real x, real y);
3303 pure real nanl(const char *);
3305 real nextafterl(real x, real y);
3307 real nexttowardl(real x, real y);
3309 real fdiml(real x, real y);
3311 pure real fmaxl(real x, real y);
3313 pure real fminl(real x, real y);
3315 pure real fmal(real x, real, real);
3317 else version (DragonFlyBSD)
3320 double acos(double x);
3321 double asin(double x);
3322 pure double atan(double x);
3323 double atan2(double, double);
3324 pure double cos(double x);
3325 pure double sin(double x);
3326 pure double tan(double x);
3328 double cosh(double x);
3329 double sinh(double x);
3330 pure double tanh(double x);
3332 double exp(double x);
3333 pure double frexp(double, int *exp);
3334 double ldexp(double, int exp);
3335 double log(double x);
3336 double log10(double x);
3337 pure double modf(double x, double *iptr);
3339 double pow(double x, double y);
3340 double sqrt(double x);
3342 pure double ceil(double x);
3343 pure double fabs(double x);
3344 pure double floor(double x);
3345 double fmod(double x, double);
3347 double acosh(double x);
3348 pure double asinh(double x);
3349 double atanh(double x);
3351 double exp2(double x);
3352 double expm1(double x);
3353 int ilogb(double x);
3354 double log1p(double x);
3355 double log2(double x);
3356 double logb(double x);
3357 double scalbn(double x, int n);
3358 double scalbln(double x, c_long n);
3360 pure double cbrt(double x);
3361 double hypot(double x, double y);
3363 pure double erf(double x);
3364 double erfc(double x);
3365 double lgamma(double x);
3366 double tgamma(double x);
3368 pure double nearbyint(double x);
3369 pure double rint(double x);
3370 c_long lrint(double x);
3371 long llrint(double x);
3372 pure double round(double x);
3373 c_long lround(double x);
3374 long llround(double x);
3375 pure double trunc(double x);
3377 double remainder(double x , double y);
3378 double remquo(double x, double y, int * quo);
3380 pure double copysign(double x, double y);
3381 pure double nan(const char *);
3382 double nextafter(double x, double y);
3383 double nexttoward(double x, real y);
3385 double fdim(double x, double y);
3386 pure double fmax(double x, double y);
3387 pure double fmin(double x, double y);
3389 pure double fma(double x, double y, double z);
3391 double j0(double x);
3392 double j1(double x);
3393 double jn(int, double);
3394 double y0(double x);
3395 double y1(double x);
3396 double yn(int, double);
3398 double gamma(double x);
3399 double scalb(double x, double y);
3401 double drem(double x, double y);
3402 int finite(double x);
3403 double gamma_r(double x, int *);
3404 double lgamma_r(double x, int *);
3406 double significand(double x);
3409 float acosf(float x);
3410 float asinf(float x);
3411 pure float atanf(float x);
3412 float atan2f(float x, float y);
3413 pure float cosf(float x);
3414 pure float sinf(float x);
3415 pure float tanf(float x);
3417 float acoshf(float x);
3418 pure float asinhf(float x);
3419 float atanhf(float x);
3420 float coshf(float x);
3421 float sinhf(float x);
3422 pure float tanhf(float x);
3424 float expf(float x);
3425 float exp2f(float x);
3426 float expm1f(float x);
3427 pure float frexpf(float x, int *exp);
3428 int ilogbf(float x);
3429 float ldexpf(float x, int exp);
3430 float logf(float x);
3431 float log10f(float x);
3432 float log1pf(float x);
3433 float log2f(float x);
3434 float logbf(float x);
3435 pure float modff(float x, float *iptr);
3436 float scalbnf(float x, int y);
3437 float scalblnf(float x, c_long y);
3439 pure float cbrtf(float x);
3440 pure float fabsf(float x);
3441 float hypotf(float x, float y);
3442 float powf(float x, float y);
3443 float sqrtf(float x);
3445 pure float erff(float x);
3446 float erfcf(float x);
3447 float lgammaf(float x);
3448 float tgammaf(float x);
3450 pure float ceilf(float x);
3451 pure float floorf(float x);
3452 pure float nearbyintf(float x);
3453 pure float rintf(float x);
3454 c_long lrintf(float x);
3455 long llrintf(float x);
3456 pure float roundf(float x);
3457 c_long lroundf(float x);
3458 long llroundf(float x);
3459 pure float truncf(float x);
3461 pure float fmodf(float x, float y);
3462 float remainderf(float x, float y);
3463 float remquof(float x, float y, int *iptr);
3465 pure float copysignf(float x, float y);
3466 pure float nanf(const char *);
3467 float nextafterf(float x, float y);
3468 float nexttowardf(float x, real y);
3470 float fdimf(float x, float y);
3471 pure float fmaxf(float x, float y);
3472 pure float fminf(float x, float y);
3474 pure float fmaf(float x, float y, float z);
3478 float jnf(int, float);
3479 float scalbf(float x, float);
3482 float ynf(int, float);
3483 float gammaf(float x);
3484 float dremf(float x, float);
3485 pure int finitef(float x);
3486 pure int isinff(float x);
3487 pure int isnanf(float x);
3489 float gammaf_r(float x, int *);
3490 float lgammaf_r(float x, int *);
3491 float significandf(float x);
3494 pure real acosl(real x);
3495 pure real asinl(real x);
3496 pure real atanl(real x);
3497 real atan2l(real y, real x);
3498 pure real cosl(real x);
3499 pure real sinl(real x);
3500 pure real tanl(real x);
3502 real acoshl(real x);
3503 pure real asinhl(real x);
3504 real atanhl(real x);
3507 pure real tanhl(real x);
3511 real expm1l(real x);
3512 pure real frexpl(real x, int *exp);
3514 real ldexpl(real x, int exp);
3516 real log10l(real x);
3517 real log1pl(real x);
3520 pure real modfl(real x, real *iptr);
3521 real scalbnl(real x, int y);
3522 real scalblnl(real x, c_long y);
3524 pure real cbrtl(real x);
3525 pure real fabsl(real x);
3526 real hypotl(real x, real y);
3527 real powl(real x, real y);
3530 pure real erfl(real x);
3532 real lgammal(real x);
3533 real tgammal(real x);
3535 pure real ceill(real x);
3536 pure real floorl(real x);
3537 pure real nearbyintl(real x);
3538 pure real rintl(real x);
3539 c_long lrintl(real x);
3540 long llrintl(real x);
3541 pure real roundl(real x);
3542 c_long lroundl(real x);
3543 long llroundl(real x);
3544 pure real truncl(real x);
3546 pure real fmodl(real x, real);
3547 pure real remainderl(real x, real);
3548 pure real remquol(real x, real y, int *iptr);
3550 pure real copysignl(real x, real y);
3551 pure real nanl(const char *);
3552 real nextafterl(real x, real y);
3553 real nexttowardl(real x, real y);
3555 real fdiml(real x, real y);
3556 pure real fmaxl(real x, real y);
3557 pure real fminl(real x, real y);
3559 pure real fmal(real x, real, real);
3561 else version (CRuntime_Bionic)
3564 double acos(double x);
3566 float acosf(float x);
3567 /// Added since Lollipop
3571 double asin(double x);
3573 float asinf(float x);
3574 /// Added since Lollipop
3578 pure double atan(double x);
3580 pure float atanf(float x);
3581 /// Added since Lollipop
3582 pure real atanl(real x);
3585 double atan2(double y, double x);
3587 float atan2f(float y, float x);
3588 /// Added since Lollipop
3589 real atan2l(real y, real x);
3592 pure double cos(double x);
3594 pure float cosf(float x);
3596 pure real cosl(real x);
3599 pure double sin(double x);
3601 pure float sinf(float x);
3602 /// Added since Lollipop
3603 pure real sinl(real x);
3606 pure double tan(double x);
3608 pure float tanf(float x);
3609 /// Added since Lollipop
3610 pure real tanl(real x);
3613 double acosh(double x);
3615 float acoshf(float x);
3616 /// Added since Lollipop
3617 real acoshl(real x);
3620 pure double asinh(double x);
3622 pure float asinhf(float x);
3623 /// Added since Lollipop
3624 pure real asinhl(real x);
3627 double atanh(double x);
3629 float atanhf(float x);
3630 /// Added since Lollipop
3631 real atanhl(real x);
3634 double cosh(double x);
3636 float coshf(float x);
3637 /// Added since Lollipop
3641 double sinh(double x);
3643 float sinhf(float x);
3644 /// Added since Lollipop
3648 pure double tanh(double x);
3650 pure float tanhf(float x);
3651 /// Added since Lollipop
3652 pure real tanhl(real x);
3655 double exp(double x);
3657 float expf(float x);
3662 double exp2(double x);
3664 float exp2f(float x);
3665 /// Added since Lollipop
3669 double expm1(double x);
3671 float expm1f(float x);
3672 /// Added since Lollipop
3673 real expm1l(real x);
3676 pure double frexp(double value, int* exp);
3678 pure float frexpf(float value, int* exp);
3679 /// Added since Lollipop
3680 pure real frexpl(real value, int* exp);
3683 int ilogb(double x);
3685 int ilogbf(float x);
3690 double ldexp(double x, int exp);
3692 float ldexpf(float x, int exp);
3694 real ldexpl(real x, int exp);
3697 double log(double x);
3699 float logf(float x);
3700 /// Added since Lollipop
3704 double log10(double x);
3706 float log10f(float x);
3707 /// Added since Lollipop
3708 real log10l(real x);
3711 double log1p(double x);
3713 float log1pf(float x);
3714 /// Added since Lollipop
3715 real log1pl(real x);
3718 double log2(double x);
3720 float log2f(float x);
3725 double logb(double x);
3727 float logbf(float x);
3732 pure double modf(double value, double* iptr);
3734 pure float modff(float value, float* iptr);
3735 /// Added since Lollipop
3736 pure real modfl(real value, real *iptr);
3739 double scalbn(double x, int n);
3741 float scalbnf(float x, int n);
3743 real scalbnl(real x, int n);
3746 double scalbln(double x, c_long n);
3748 float scalblnf(float x, c_long n);
3750 real scalblnl(real x, c_long n);
3753 pure double cbrt(double x);
3755 pure float cbrtf(float x);
3756 /// Added since Lollipop
3757 pure real cbrtl(real x);
3760 pure double fabs(double x);
3762 pure float fabsf(float x);
3764 pure real fabsl(real x);
3767 double hypot(double x, double y);
3769 float hypotf(float x, float y);
3770 /// Added since Lollipop
3771 real hypotl(real x, real y);
3774 double pow(double x, double y);
3776 float powf(float x, float y);
3777 /// Added since Lollipop
3778 real powl(real x, real y);
3781 double sqrt(double x);
3783 float sqrtf(float x);
3784 /// Added since Lollipop
3788 pure double erf(double x);
3790 pure float erff(float x);
3791 /// Added since Lollipop
3792 pure real erfl(real x);
3795 double erfc(double x);
3797 float erfcf(float x);
3798 /// Added since Lollipop
3802 double lgamma(double x);
3804 float lgammaf(float x);
3805 /// Added since Lollipop
3806 real lgammal(real x);
3809 double tgamma(double x);
3811 float tgammaf(float x);
3812 /// Added since Lollipop
3813 real tgammal(real x);
3816 pure double ceil(double x);
3818 pure float ceilf(float x);
3820 pure real ceill(real x);
3823 pure double floor(double x);
3825 pure float floorf(float x);
3827 pure real floorl(real x);
3830 pure double nearbyint(double x);
3832 pure float nearbyintf(float x);
3833 /// Added since Lollipop
3834 pure real nearbyintl(real x);
3837 pure double rint(double x);
3839 pure float rintf(float x);
3840 /// Added since Lollipop
3841 pure real rintl(real x);
3844 c_long lrint(double x);
3846 c_long lrintf(float x);
3847 /// Added since Lollipop
3848 c_long lrintl(real x);
3851 long llrint(double x);
3853 long llrintf(float x);
3854 /// Added since Lollipop
3855 long llrintl(real x);
3858 pure double round(double x);
3860 pure float roundf(float x);
3862 pure real roundl(real x);
3865 c_long lround(double x);
3867 c_long lroundf(float x);
3869 c_long lroundl(real x);
3872 long llround(double x);
3874 long llroundf(float x);
3876 long llroundl(real x);
3879 pure double trunc(double x);
3881 pure float truncf(float x);
3883 pure real truncl(real x);
3886 double fmod(double x, double y);
3888 float fmodf(float x, float y);
3889 /// Added since Lollipop
3890 real fmodl(real x, real y);
3893 double remainder(double x, double y);
3895 float remainderf(float x, float y);
3896 /// Added since Lollipop
3897 real remainderl(real x, real y);
3900 double remquo(double x, double y, int* quo);
3902 float remquof(float x, float y, int* quo);
3903 /// Added since Lollipop
3904 real remquol(real x, real y, int* quo);
3907 pure double copysign(double x, double y);
3909 pure float copysignf(float x, float y);
3911 pure real copysignl(real x, real y);
3914 pure double nan(char* tagp);
3916 pure float nanf(char* tagp);
3918 pure real nanl(char* tagp);
3921 double nextafter(double x, double y);
3923 float nextafterf(float x, float y);
3924 /// Added since Lollipop
3925 real nextafterl(real x, real y);
3928 double nexttoward(double x, real y);
3930 float nexttowardf(float x, real y);
3932 real nexttowardl(real x, real y);
3935 double fdim(double x, double y);
3937 float fdimf(float x, float y);
3939 real fdiml(real x, real y);
3942 pure double fmax(double x, double y);
3944 pure float fmaxf(float x, float y);
3946 pure real fmaxl(real x, real y);
3949 pure double fmin(double x, double y);
3951 pure float fminf(float x, float y);
3953 pure real fminl(real x, real y);
3956 pure double fma(double x, double y, double z);
3958 pure float fmaf(float x, float y, float z);
3959 /// Added since Lollipop
3960 pure real fmal(real x, real y, real z);
3962 else version (CRuntime_UClibc)
3964 // uClibc wraps 'long double' to double, so we do the same for 'real'
3967 double acos(double x);
3969 float acosf(float x);
3971 extern(D) real acosl(real x) { return acos(cast(double) x); }
3974 double asin(double x);
3976 float asinf(float x);
3978 extern(D) real asinl(real x) { return asin(cast(double) x); }
3981 pure double atan(double x);
3983 pure float atanf(float x);
3985 extern(D) pure real atanl(real x) { return atan(cast(double) x); }
3988 double atan2(double y, double x);
3990 float atan2f(float y, float x);
3992 extern(D) real atan2l(real y, real x) { return atan2(cast(double) y, cast(double) x); }
3995 pure double cos(double x);
3997 pure float cosf(float x);
3999 extern(D) pure real cosl(real x) { return cos(cast(double) x); }
4002 pure double sin(double x);
4004 pure float sinf(float x);
4006 extern(D) pure real sinl(real x) { return sin(cast(double) x); }
4009 pure double tan(double x);
4011 pure float tanf(float x);
4013 extern(D) pure real tanl(real x) { return tan(cast(double) x); }
4016 double acosh(double x);
4018 float acoshf(float x);
4020 extern(D) real acoshl(real x) { return acosh(cast(double) x); }
4023 pure double asinh(double x);
4025 pure float asinhf(float x);
4027 extern(D) pure real asinhl(real x) { return asinh(cast(double) x); }
4030 double atanh(double x);
4032 float atanhf(float x);
4034 extern(D) real atanhl(real x) { return atanh(cast(double) x); }
4037 double cosh(double x);
4039 float coshf(float x);
4041 extern(D) real coshl(real x) { return cosh(cast(double) x); }
4044 double sinh(double x);
4046 float sinhf(float x);
4048 extern(D) real sinhl(real x) { return sinh(cast(double) x); }
4051 double tanh(double x);
4053 float tanhf(float x);
4055 extern(D) real tanhl(real x) { return tanh(cast(double) x); }
4058 double exp(double x);
4060 float expf(float x);
4062 extern(D) real expl(real x) { return exp(cast(double) x); }
4065 double exp2(double x);
4067 float exp2f(float x);
4069 extern(D) real exp2l(real x) { return exp2(cast(double) x); }
4072 double expm1(double x);
4074 float expm1f(float x);
4076 extern(D) real expm1l(real x) { return expm1(cast(double) x); }
4079 pure double frexp(double value, int* exp);
4081 pure float frexpf(float value, int* exp);
4083 extern(D) pure real frexpl(real value, int* exp) { return frexp(cast(double) value, exp); }
4086 int ilogb(double x);
4088 int ilogbf(float x);
4090 extern(D) int ilogbl(real x) { return ilogb(cast(double) x); }
4093 double ldexp(double x, int exp);
4095 float ldexpf(float x, int exp);
4097 extern(D) real ldexpl(real x, int exp) { return ldexp(cast(double) x, exp); }
4100 double log(double x);
4102 float logf(float x);
4104 extern(D) real logl(real x) { return log(cast(double) x); }
4107 double log10(double x);
4109 float log10f(float x);
4111 extern(D) real log10l(real x) { return log10(cast(double) x); }
4114 double log1p(double x);
4116 float log1pf(float x);
4118 extern(D) real log1pl(real x) { return log1p(cast(double) x); }
4121 double log2(double x);
4123 float log2f(float x);
4125 extern(D) real log2l(real x) { return log2(cast(double) x); }
4128 double logb(double x);
4130 float logbf(float x);
4132 extern(D) real logbl(real x) { return logb(cast(double) x); }
4135 pure double modf(double value, double* iptr);
4137 pure float modff(float value, float* iptr);
4139 extern(D) pure real modfl(real value, real *iptr) { return modf(cast(double) value, cast(double*) iptr); }
4142 double scalbn(double x, int n);
4144 float scalbnf(float x, int n);
4146 extern(D) real scalbnl(real x, int n) { return scalbln(cast(double) x, n); }
4149 double scalbln(double x, c_long n);
4151 float scalblnf(float x, c_long n);
4153 extern(D) real scalblnl(real x, c_long n) { return scalbln(cast(double) x, n); }
4156 pure double cbrt(double x);
4158 pure float cbrtf(float x);
4160 extern(D) pure real cbrtl(real x) { return cbrt(cast(double) x); }
4163 pure double fabs(double x);
4165 pure float fabsf(float x);
4167 extern(D) pure real fabsl(real x) { return fabs(cast(double) x); }
4170 double hypot(double x, double y);
4172 float hypotf(float x, float y);
4174 extern(D) real hypotl(real x, real y) { return hypot(cast(double) x, cast(double) y); }
4177 double pow(double x, double y);
4179 float powf(float x, float y);
4181 extern(D) real powl(real x, real y) { return pow(cast(double) x, cast(double) y); }
4184 double sqrt(double x);
4186 float sqrtf(float x);
4188 extern(D) real sqrtl(real x) { return sqrt(cast(double) x); }
4191 pure double erf(double x);
4193 pure float erff(float x);
4195 extern(D) pure real erfl(real x) { return erf(cast(double) x); }
4198 double erfc(double x);
4200 float erfcf(float x);
4202 extern(D) real erfcl(real x) { return erfc(cast(double) x); }
4205 double lgamma(double x);
4207 float lgammaf(float x);
4209 extern(D) real lgammal(real x) { return lgamma(cast(double) x); }
4212 double tgamma(double x);
4214 float tgammaf(float x);
4216 extern(D) real tgammal(real x) { return tgamma(cast(double) x); }
4219 pure double ceil(double x);
4221 pure float ceilf(float x);
4223 extern(D) pure real ceill(real x) { return ceil(cast(double) x); }
4226 pure double floor(double x);
4228 pure float floorf(float x);
4230 extern(D) pure real floorl(real x) { return floor(cast(double) x); }
4233 pure double nearbyint(double x);
4235 pure float nearbyintf(float x);
4237 extern(D) pure real nearbyintl(real x) { return nearbyint(cast(double) x); }
4240 pure double rint(double x);
4242 pure float rintf(float x);
4244 extern(D) pure real rintl(real x) { return rint(cast(double) x); }
4247 c_long lrint(double x);
4249 c_long lrintf(float x);
4251 extern(D) c_long lrintl(real x) { return lrint(cast(double) x); }
4254 long llrint(double x);
4256 long llrintf(float x);
4258 extern(D) long llrintl(real x) { return llrint(cast(double) x); }
4261 pure double round(double x);
4263 pure float roundf(float x);
4265 extern(D) pure real roundl(real x) { return round(cast(double) x); }
4268 c_long lround(double x);
4270 c_long lroundf(float x);
4272 extern(D) c_long lroundl(real x) { return lround(cast(double) x); }
4275 long llround(double x);
4277 long llroundf(float x);
4279 extern(D) long llroundl(real x) { return llround(cast(double) x); }
4282 pure double trunc(double x);
4284 pure float truncf(float x);
4286 extern(D) pure real truncl(real x) { return trunc(cast(double) x); }
4289 double fmod(double x, double y);
4291 float fmodf(float x, float y);
4293 extern(D) real fmodl(real x, real y) { return fmod(cast(double) x, cast(double) y); }
4296 double remainder(double x, double y);
4298 float remainderf(float x, float y);
4300 extern(D) real remainderl(real x, real y) { return remainder(cast(double) x, cast(double) y); }
4303 double remquo(double x, double y, int* quo);
4305 float remquof(float x, float y, int* quo);
4307 extern(D) real remquol(real x, real y, int* quo) { return remquo(cast(double) x, cast(double) y, quo); }
4310 pure double copysign(double x, double y);
4312 pure float copysignf(float x, float y);
4314 extern(D) pure real copysignl(real x, real y) { return copysign(cast(double) x, cast(double) y); }
4317 pure double nan(char* tagp);
4319 pure float nanf(char* tagp);
4321 extern(D) pure real nanl(char* tagp) { return nan(tagp); }
4324 double nextafter(double x, double y);
4326 float nextafterf(float x, float y);
4328 extern(D) real nextafterl(real x, real y) { return nextafter(cast(double) x, cast(double) y); }
4331 double nexttoward(double x, real y);
4333 float nexttowardf(float x, real y);
4335 extern(D) real nexttowardl(real x, real y) { return nexttoward(cast(double) x, cast(double) y); }
4338 double fdim(double x, double y);
4340 float fdimf(float x, float y);
4342 extern(D) real fdiml(real x, real y) { return fdim(cast(double) x, cast(double) y); }
4345 pure double fmax(double x, double y);
4347 pure float fmaxf(float x, float y);
4349 extern(D) pure real fmaxl(real x, real y) { return fmax(cast(double) x, cast(double) y); }
4352 pure double fmin(double x, double y);
4354 pure float fminf(float x, float y);
4356 extern(D) pure real fminl(real x, real y) { return fmin(cast(double) x, cast(double) y); }
4359 pure double fma(double x, double y, double z);
4361 pure float fmaf(float x, float y, float z);
4363 extern(D) pure real fmal(real x, real y, real z) { return fma(cast(double) x, cast(double) y, cast(double) z); }
4368 double acos(double x);
4370 float acosf(float x);
4375 double asin(double x);
4377 float asinf(float x);
4382 pure double atan(double x);
4384 pure float atanf(float x);
4386 pure real atanl(real x);
4389 double atan2(double y, double x);
4391 float atan2f(float y, float x);
4393 real atan2l(real y, real x);
4396 pure double cos(double x);
4398 pure float cosf(float x);
4400 pure real cosl(real x);
4403 pure double sin(double x);
4405 pure float sinf(float x);
4407 pure real sinl(real x);
4410 pure double tan(double x);
4412 pure float tanf(float x);
4414 pure real tanl(real x);
4417 double acosh(double x);
4419 float acoshf(float x);
4421 real acoshl(real x);
4424 pure double asinh(double x);
4426 pure float asinhf(float x);
4428 pure real asinhl(real x);
4431 double atanh(double x);
4433 float atanhf(float x);
4435 real atanhl(real x);
4438 double cosh(double x);
4440 float coshf(float x);
4445 double sinh(double x);
4447 float sinhf(float x);
4452 pure double tanh(double x);
4454 pure float tanhf(float x);
4456 pure real tanhl(real x);
4459 double exp(double x);
4461 float expf(float x);
4466 double exp2(double x);
4468 float exp2f(float x);
4473 double expm1(double x);
4475 float expm1f(float x);
4477 real expm1l(real x);
4480 pure double frexp(double value, int* exp);
4482 pure float frexpf(float value, int* exp);
4484 pure real frexpl(real value, int* exp);
4487 int ilogb(double x);
4489 int ilogbf(float x);
4494 double ldexp(double x, int exp);
4496 float ldexpf(float x, int exp);
4498 real ldexpl(real x, int exp);
4501 double log(double x);
4503 float logf(float x);
4508 double log10(double x);
4510 float log10f(float x);
4512 real log10l(real x);
4515 double log1p(double x);
4517 float log1pf(float x);
4519 real log1pl(real x);
4522 double log2(double x);
4524 float log2f(float x);
4529 double logb(double x);
4531 float logbf(float x);
4536 pure double modf(double value, double* iptr);
4538 pure float modff(float value, float* iptr);
4540 pure real modfl(real value, real *iptr);
4543 double scalbn(double x, int n);
4545 float scalbnf(float x, int n);
4547 real scalbnl(real x, int n);
4550 double scalbln(double x, c_long n);
4552 float scalblnf(float x, c_long n);
4554 real scalblnl(real x, c_long n);
4557 pure double cbrt(double x);
4559 pure float cbrtf(float x);
4561 pure real cbrtl(real x);
4564 pure double fabs(double x);
4565 version (CRuntime_Microsoft)
4571 pure float fabsf(float x);
4573 pure real fabsl(real x);
4577 double hypot(double x, double y);
4579 float hypotf(float x, float y);
4581 real hypotl(real x, real y);
4584 double pow(double x, double y);
4586 float powf(float x, float y);
4588 real powl(real x, real y);
4591 double sqrt(double x);
4593 float sqrtf(float x);
4598 pure double erf(double x);
4600 pure float erff(float x);
4602 pure real erfl(real x);
4605 double erfc(double x);
4607 float erfcf(float x);
4612 double lgamma(double x);
4614 float lgammaf(float x);
4616 real lgammal(real x);
4619 double tgamma(double x);
4621 float tgammaf(float x);
4623 real tgammal(real x);
4626 pure double ceil(double x);
4628 pure float ceilf(float x);
4630 pure real ceill(real x);
4633 pure double floor(double x);
4635 pure float floorf(float x);
4637 pure real floorl(real x);
4640 pure double nearbyint(double x);
4642 pure float nearbyintf(float x);
4644 pure real nearbyintl(real x);
4647 pure double rint(double x);
4649 pure float rintf(float x);
4651 pure real rintl(real x);
4654 c_long lrint(double x);
4656 c_long lrintf(float x);
4658 c_long lrintl(real x);
4661 long llrint(double x);
4663 long llrintf(float x);
4665 long llrintl(real x);
4668 pure double round(double x);
4670 pure float roundf(float x);
4672 pure real roundl(real x);
4675 c_long lround(double x);
4677 c_long lroundf(float x);
4679 c_long lroundl(real x);
4682 long llround(double x);
4684 long llroundf(float x);
4686 long llroundl(real x);
4689 pure double trunc(double x);
4691 pure float truncf(float x);
4693 pure real truncl(real x);
4696 double fmod(double x, double y);
4698 float fmodf(float x, float y);
4700 real fmodl(real x, real y);
4703 double remainder(double x, double y);
4705 float remainderf(float x, float y);
4707 real remainderl(real x, real y);
4710 double remquo(double x, double y, int* quo);
4712 float remquof(float x, float y, int* quo);
4714 real remquol(real x, real y, int* quo);
4717 pure double copysign(double x, double y);
4719 pure float copysignf(float x, float y);
4721 pure real copysignl(real x, real y);
4724 pure double nan(char* tagp);
4726 pure float nanf(char* tagp);
4728 pure real nanl(char* tagp);
4731 double nextafter(double x, double y);
4733 float nextafterf(float x, float y);
4735 real nextafterl(real x, real y);
4738 double nexttoward(double x, real y);
4740 float nexttowardf(float x, real y);
4742 real nexttowardl(real x, real y);
4745 double fdim(double x, double y);
4747 float fdimf(float x, float y);
4749 real fdiml(real x, real y);
4752 pure double fmax(double x, double y);
4754 pure float fmaxf(float x, float y);
4756 pure real fmaxl(real x, real y);
4759 pure double fmin(double x, double y);
4761 pure float fminf(float x, float y);
4763 pure real fminl(real x, real y);
4766 pure double fma(double x, double y, double z);
4768 pure float fmaf(float x, float y, float z);
4770 pure real fmal(real x, real y, real z);