summaryrefslogtreecommitdiff
path: root/lib/msun/src/math.h
Commit message (Collapse)AuthorAgeFilesLines
* Remove intel compiler support from math.hWarner Losh2020-10-241-2/+2
| | | | | | | | | | | The intel compiler support has badly decayed over the years. Stop pretending that we support it. Note, I've stopped short of requiring gcc builtin support with this commit since other compilers may be used to build non-base software and we need to support those so more investigation is needed before simplifying further. Notes: svn path=/head/; revision=367030
* Add __isnan()/__isnanf() aliases for compatibility with glibc and CUDADimitry Andric2019-11-021-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Even though clang comes with a number of internal CUDA wrapper headers, compiling sample CUDA programs will result in errors similar to: In file included from <built-in>:1: In file included from /usr/lib/clang/9.0.0/include/__clang_cuda_runtime_wrapper.h:204: /usr/home/arr/cuda/var/cuda-repo-10-0-local-10.0.130-410.48/usr/local/cuda-10.0//include/crt/math_functions.hpp:2910:7: error: no matching function for call to '__isnan' if (__isnan(a)) { ^~~~~~~ /usr/lib/clang/9.0.0/include/__clang_cuda_device_functions.h:460:16: note: candidate function not viable: call to __device__ function from __host__ function __DEVICE__ int __isnan(double __a) { return __nv_isnand(__a); } ^ CUDA expects __isnan() and __isnanf() declarations to be available, which are glibc specific extensions, equivalent to the regular isnan() and isnanf(). To provide these, define __isnan() and __isnanf() as aliases of the already existing static inline functions __inline_isnan() and __inline_isnanf() from math.h. Reported by: arrowd PR: 241550 MFC after: 1 week Notes: svn path=/head/; revision=354255
* Implement sincos, sincosf, and sincosl.Michal Meloun2017-05-281-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The primary benefit of these functions is that argument reduction is done once instead of twice in independent calls to sin() and cos(). * lib/msun/Makefile: . Add s_sincos[fl].c to the build. . Add sincos.3 documentation. . Add appropriate MLINKS. * lib/msun/Symbol.map: . Expose sincos[fl] symbols in dynamic libm.so. * lib/msun/man/sincos.3: . Documentation for sincos[fl]. * lib/msun/src/k_sincos.h: . Kernel for sincos() function. This merges the individual kernels for sin() and cos(). The merger offered an opportunity to re-arrange the individual kernels for better performance. * lib/msun/src/k_sincosf.h: . Kernel for sincosf() function. This merges the individual kernels for sinf() and cosf(). The merger offered an opportunity to re-arrange the individual kernels for better performance. * lib/msun/src/k_sincosl.h: . Kernel for sincosl() function. This merges the individual kernels for sinl() and cosl(). The merger offered an opportunity to re-arrange the individual kernels for better performance. * lib/msun/src/math.h: . Add prototytpes for sincos[fl](). * lib/msun/src/math_private.h: . Add RETURNV macros. This is needed to reset fpsetprec on I386 hardware for a function with type void. * lib/msun/src/s_sincos.c: . Implementation of sincos() where sin() and cos() were merged into one routine and possibly re-arranged for better performance. * lib/msun/src/s_sincosf.c: . Implementation of sincosf() where sinf() and cosf() were merged into one routine and possibly re-arranged for better performance. * lib/msun/src/s_sincosl.c: . Implementation of sincosl() where sinl() and cosl() were merged into one routine and possibly re-arranged for better performance. PR: 215977, 218300 Submitted by: Steven G. Kargl <sgk@troutmask.apl.washington.edu> MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D10765 Notes: svn path=/head/; revision=319047
* Fix frexpl() declaration to not include the field name.Edward Tomasz Napierala2016-06-091-1/+1
| | | | | | | MFC after: 1 month Notes: svn path=/head/; revision=301761
* * Makefile:Steve Kargl2014-09-151-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . Hook e_lgammal[_r].c to the build. . Create man page links for lgammal[-r].3. * Symbol.map: . Sort lgammal to its rightful place. . Add FBSD_1.4 section for the new lgamal_r symbol. * ld128/e_lgammal_r.c: . 128-bit implementataion of lgammal_r(). * ld80/e_lgammal_r.c: . Intel 80-bit format implementation of lgammal_r(). * src/e_lgamma.c: . Expose lgammal as a weak reference to lgamma for platforms where long double is mapped to double. * src/e_lgamma_r.c: . Use integer literal constants instead of real literal constants. Let compiler(s) do the job of conversion to the appropriate type. . Expose lgammal_r as a weak reference to lgamma_r for platforms where long double is mapped to double. * src/e_lgammaf_r.c: . Fixed the Cygnus Support conversion of e_lgamma_r.c to float. This includes the generation of new polynomial and rational approximations with fewer terms. For each approximation, include a comment on an estimate of the accuracy over the relevant domain. . Use integer literal constants instead of real literal constants. Let compiler(s) do the job of conversion to the appropriate type. This allows the removal of several explicit casts of double values to float. * src/e_lgammal.c: . Wrapper for lgammal() about lgammal_r(). * src/imprecise.c: . Remove the lgamma. * src/math.h: . Add a prototype for lgammal_r(). * man/lgamma.3: . Document the new functions. Reviewed by: bde Notes: svn path=/head/; revision=271651
* When r255294 was committed, it exposed the symbols lgammal, powl,Steve Kargl2014-08-091-22/+3
| | | | | | | | | | | | | and tgammal in libm. These functions are part of ISO/IEC 9899:1999 and their prototypes should have been moved into the appropriate __ISO_C_VISIBLE >= 1999 section. After moving the prototypes, remnants of r236148 can be removed. PR: standards/191754 Reviewed by: bde Notes: svn path=/head/; revision=269758
* * Makefile:Steve Kargl2014-07-131-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . Add s_erfl.c to building libm. . Add MLINKS for erfl.3 and erfcl.3. * Symbol.map: . Move erfl and erfcl to their proper location. * ld128/s_erfl.c: . Implementations of erfl and erfcl in the IEEE 754 128-bit format. * ld80/s_erfl.c: . Implementations of erfl and erfcl in the Intel 80-bit format. * man/erf.3: . Document the new functions. . While here, remove an incomplete sentence. * src/imprecise.c: . Remove the stupidity of mapping erfl and erfcl to erf and erfc. * src/math.h: . Move the declarations of erfl and erfcl to their proper place. * src/s_erf.c: . For architectures where double and long double are the same floating point format, use weak references to map erfl to erf and ercl to erfc. Reviewed by: bde (many earlier versions) Notes: svn path=/head/; revision=268593
* Remove ia64.Marcel Moolenaar2014-07-071-4/+0
| | | | | | | | | | | | | | | | | | | | This includes: o All directories named *ia64* o All files named *ia64* o All ia64-specific code guarded by __ia64__ o All ia64-specific makefile logic o Mention of ia64 in comments and documentation This excludes: o Everything under contrib/ o Everything under crypto/ o sys/xen/interface o sys/sys/elf_common.h Discussed at: BSDcan Notes: svn path=/head/; revision=268351
* * Makefile:Steve Kargl2013-12-301-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . Hook coshl, sinhl, and tanhl into libm. . Create symbolic links for corresponding manpages. . While here remove a nearby extraneous space. * Symbol.map: * src/math.h: . Move coshl, sinhl, and tanhl to their proper locations. * man/cosh.3: * man/sinh.3: * man/tanh.3: . Update the manpages. * src/e_cosh.c: * src/e_sinh.c: * src/s_tanh.c: . Add weak reference for LBDL_MANT_DIG==53 targets. * src/imprecise.c: . Remove the coshl, sinhl, and tanhl kludge. * src/e_coshl.c: . ld80 and ld128 implementation of coshl(). * src/e_sinhl.c: . ld80 and ld128 implementation of sinhl(). * src/s_tanhl.c: . ld80 and ld128 implementation of tanhl(). Obtained from: bde (mostly), das and kargl Notes: svn path=/head/; revision=260067
* Restore the longer form of the _Generic. The short form does not work in C++.David Chisnall2013-07-291-2/+11
| | | | Notes: svn path=/head/; revision=253766
* Reenable the isnan(double) / isinf(double) declarations when targeting C89 + ↵David Chisnall2013-07-291-0/+15
| | | | | | | SUSv2 mode. Notes: svn path=/head/; revision=253764
* Cleaner support for type qualifiers.David Chisnall2013-07-131-11/+2
| | | | | | | Submitted by: Pasi Parviainen Notes: svn path=/head/; revision=253321
* Ensure that the _Generic() macro in math.h works with qualified types.David Chisnall2013-07-131-17/+26
| | | | | | | tgmath.h contains the same bugs and so should be fixed in the same way. Notes: svn path=/head/; revision=253319
* Fix the build with C++ where __builtin_types_compatible_p is not allowed.David Chisnall2013-07-121-2/+3
| | | | Notes: svn path=/head/; revision=253260
* Fix some typoes in math.h cleanup.David Chisnall2013-07-111-3/+3
| | | | Notes: svn path=/head/; revision=253219
* Cleanups to math.h that prevent namespace conflicts with C++.David Chisnall2013-07-111-28/+49
| | | | | | | | Reviewed by: bde MFC after: 3 days Notes: svn path=/head/; revision=253215
* Add implementations of acoshl(), asinhl(), and atanhl(). This is aDavid Schultz2013-06-101-3/+3
| | | | | | | merge of the work done by bde and myself. Notes: svn path=/head/; revision=251599
* ld80 and ld128 implementations of expm1l(). This code started lifeSteve Kargl2013-06-031-1/+1
| | | | | | | | | | | | | | | | | as a fairly faithful implementation of the algorithm found in PTP Tang, "Table-driven implementation of the Expm1 function in IEEE floating-point arithmetic," ACM Trans. Math. Soft., 18, 211-222 (1992). Over the last 18-24 months, the code has under gone significant optimization and testing. Reviewed by: bde Obtained from: bde (most of the optimizations) Notes: svn path=/head/; revision=251343
* Add logl, log2l, log10l, and log1pl.David Schultz2013-06-031-4/+4
| | | | | | | Submitted by: bde Notes: svn path=/head/; revision=251292
* Compute the exponential of x for Intel 80-bit format and IEEE 128-bitSteve Kargl2012-07-231-1/+1
| | | | | | | | | | | | | | | | format. These implementations are based on PTP Tang, "Table-driven implementation of the exponential function in IEEE floating-point arithmetic," ACM Trans. Math. Soft., 15, 144-157 (1989). PR: standards/152415 Submitted by: kargl Reviewed by: bde, das Approved by: das (mentor) Notes: svn path=/head/; revision=238722
* Allow inclusion of libc++ <cmath> to work after including math.hDavid Chisnall2012-05-271-43/+36
| | | | | | | | | Submitted by: Yamaya Takashi Reviewed by: das MFC after: 1 week Notes: svn path=/head/; revision=236148
* Expose the unimplemented libm functions in the math.h header. This allows ↵David Chisnall2011-11-121-13/+13
| | | | | | | | | | C++'s <cmath> to work without the compiler complaining that the C++ versions are calling implicitly-declared functions. You will still get a linker error when they are called. OpenBSD 5.0 claims to fully implement the C99 <math.h> stuff, so might be worth investigating... Reviewed by: das Approved by: dim (mentor) Notes: svn path=/head/; revision=227472
* Don't define FP_FAST_FMA on sparc64; with the recent fixes, fma() isDavid Schultz2011-10-151-5/+2
| | | | | | | | | no longer "fast" on sparc64. (It really wasn't to begin with, since the old implementation was using long doubles, and long doubles are emulated in software on sparc64.) Notes: svn path=/head/; revision=226374
* Implement the long double version for the cube root function, cbrtl.Steve Kargl2011-03-121-2/+0
| | | | | | | | | | | The algorithm uses Newton's iterations with a crude estimate of the cube root to converge to a result. Reviewed by: bde Approved by: das Notes: svn path=/head/; revision=219571
* Add log2() and log2f().David Schultz2010-12-051-0/+2
| | | | Notes: svn path=/head/; revision=216211
* Introduce __isnanf() as an alias for isnanf(), and make the isnan()David Schultz2010-06-121-1/+2
| | | | | | | | | | | | | | macro expand to __isnanf() instead of isnanf() for float arguments. This change is needed because isnanf() isn't declared in strict POSIX or C99 mode. Compatibility note: Apps using isnan(float) that are compiled after this change won't link against an older libm. Reported by: Florian Forster <octo@verplant.org> Notes: svn path=/head/; revision=209110
* Namespace: scalb() is withdrawn from POSIX.David Schultz2009-03-141-1/+4
| | | | Notes: svn path=/head/; revision=189805
* C99 TC2 now wants FP_FAST_FMA* to be defined to 1, if the macros areDavid Schultz2009-02-071-3/+3
| | | | | | | defined at all. See also: defect report #223. Notes: svn path=/head/; revision=188272
* Fix the types of INFINITY and NAN, which were broken in r131851. TheyDavid Schultz2009-01-081-2/+2
| | | | | | | | | | | should both be floats, not doubles. PR: 127795 Submitted by: Christoph Mallon MFC after: 2 weeks Notes: svn path=/head/; revision=186886
* Add implementations of acosl(), asinl(), atanl(), atan2l(),David Schultz2008-07-311-0/+6
| | | | | | | | | | and cargl(). Reviewed by: bde sparc64 testing resources from: remko Notes: svn path=/head/; revision=181074
* Implement fmodl.David Schultz2008-06-191-2/+0
| | | | | | | Document fmodl and fix some errors in the fmod manpage. Notes: svn path=/head/; revision=179882
* Hook remquol() and remainderl() up to the build.David Schultz2008-03-301-1/+1
| | | | Notes: svn path=/head/; revision=177766
* Hook hypotl() and cabsl() up to the build.David Schultz2008-03-301-2/+0
| | | | Notes: svn path=/head/; revision=177760
* MI implementation of sqrtl(). This is very slow and shouldDavid Schultz2008-03-021-1/+1
| | | | | | | be overridden when hardware sqrt is available. Notes: svn path=/head/; revision=176720
* Add tgammaf() as a simple wrapper around tgamma().David Schultz2008-02-181-0/+1
| | | | Notes: svn path=/head/; revision=176388
* Add implementations of sinl(), cosl(), and tanl().David Schultz2008-02-171-0/+6
| | | | | | | Submitted by: Steve Kargl <sgk@apl.washington.edu> Notes: svn path=/head/; revision=176360
* Implement exp2l(). There is one version for machines with 80-bitDavid Schultz2008-01-181-0/+2
| | | | | | | | | | | long doubles (i386, amd64, ia64) and one for machines with 128-bit long doubles (sparc64). Other platforms use the double version. I've only done runtime testing on i386. Thanks to bde@ for helpful discussions and bugfixes. Notes: svn path=/head/; revision=175460
* Implement rintl(), nearbyintl(), lrintl(), and llrintl().David Schultz2008-01-141-5/+3
| | | | | | | Thanks to bde@ for feedback and testing of rintl(). Notes: svn path=/head/; revision=175309
* Grumble. DO declare logbl(), DON'T declare logl() just yet.David Schultz2007-12-201-0/+2
| | | | | | | | | | bde is going to commit logl() Real Soon Now. I'm just trying to slow him down with merge conflicts. Noticed by: bde Notes: svn path=/head/; revision=174804
* Remove the declaration of logl(). The relevant bits haven't beenDavid Schultz2007-12-201-2/+0
| | | | | | | | | | committed yet, but the declaration leaked in when I added nan() and friends. Reported by: pav Notes: svn path=/head/; revision=174801
* Implement and document nan(), nanf(), and nanl(). This commitDavid Schultz2007-12-161-1/+5
| | | | | | | | | | adds two new directories in msun: ld80 and ld128. These are for long double functions specific to the 80-bit long double format used on x86-derived architectures, and the 128-bit format used on sparc64, respectively. Notes: svn path=/head/; revision=174684
* Implement modfl().David Schultz2007-01-071-1/+1
| | | | Notes: svn path=/head/; revision=165855
* Implement truncl() based on floorl().David Schultz2005-04-161-1/+1
| | | | Notes: svn path=/head/; revision=145170
* Add roundl(), lroundl(), and llroundl().David Schultz2005-04-081-1/+5
| | | | Notes: svn path=/head/; revision=144772
* Implement exp2() and exp2f().David Schultz2005-04-051-0/+2
| | | | Notes: svn path=/head/; revision=144648
* Implement and document remquo() and remquof().David Schultz2005-03-251-0/+2
| | | | Notes: svn path=/head/; revision=144091
* Add missing prototypes for fma() and fmaf(), and remove an inaccurateDavid Schultz2005-03-181-1/+2
| | | | | | | comment. Notes: svn path=/head/; revision=143777
* - Define FP_FAST_FMA for sparc64, since fma() is now implemented usingDavid Schultz2005-03-071-4/+12
| | | | | | | | | | sparc64's 128-bit long doubles. - Define FP_FAST_FMAL for ia64. - Prototypes for fmal, frexpl, ldexpl, nextafterl, nexttoward{,f,l}, scalblnl, and scalbnl. Notes: svn path=/head/; revision=143221
* Remove wrappers and other cruft intended to support SVID, mistakes inDavid Schultz2005-02-041-45/+0
| | | | | | | | | | C90, and other arcana. Most of these features were never fully supported or enabled by default. Ok: bde, stefanf Notes: svn path=/head/; revision=141280
* Add fma() and fmaf(), which implement a fused multiply-add operation.David Schultz2005-01-221-0/+5
| | | | Notes: svn path=/head/; revision=140609