Commit Graph

34 Commits

Author SHA1 Message Date
Gael Guennebaud
1395056fc0 Make EIGEN_HAS_C99_MATH user configurable 2016-05-20 14:58:19 +02:00
Gael Guennebaud
c028d96089 Improve doc of special math functions 2016-05-20 14:18:48 +02:00
Gael Guennebaud
7a54032408 zeta and digamma do not require C++11/C99 2016-05-19 17:36:47 +02:00
Ola Røer Thorsen
be78aea6b3 fix double-promotion/float-conversion in Core/SpecialFunctions.h 2016-05-04 10:52:08 +02:00
Benoit Steiner
dacb23277e Fixed the igamma and igammac implementations to make them callable from a gpu kernel. 2016-04-28 18:54:54 -07:00
Benoit Steiner
a5d4545083 Deleted unused variable 2016-04-28 14:14:48 -07:00
Justin Lebar
40d1e2f8c7 Eliminate mutual recursion in igamma{,c}_impl::Run.
Presently, igammac_impl::Run calls igamma_impl::Run, which in turn calls
igammac_impl::Run.

This isn't actually mutual recursion; the calls are guarded such that we never
get into a loop.  Nonetheless, it's a stretch for clang to prove this.  As a
result, clang emits a recursive call in both igammac_impl::Run and
igamma_impl::Run.

That this is suboptimal code is bad enough, but it's particularly bad when
compiling for CUDA/nvptx.  nvptx allows recursion, but only begrudgingly: If
you have recursive calls in a kernel, it's on you to manually specify the
kernel's stack size.  Otherwise, ptxas will dump a warning, make a guess, and
who knows if it's right.

This change explicitly eliminates the mutual recursion in igammac_impl::Run and
igamma_impl::Run.
2016-04-28 13:57:08 -07:00
Benoit Steiner
2986253259 Cleaned up the implementation of digamma 2016-04-13 14:24:06 -07:00
Gael Guennebaud
675e0a2224 Fix static/inline keywords order. 2016-04-11 15:06:20 +02:00
Till Hoffmann
643b697649 Proper handling of domain errors. 2016-04-10 00:37:53 +01:00
Till Hoffmann
de057ebe54 Added nans to zeta function. 2016-04-09 20:07:36 +01:00
Till Hoffmann
a350c25a39 Added accuracy comments. 2016-04-05 18:20:40 +01:00
Till Hoffmann
b97911dd18 Refactored code into type-specific helper functions. 2016-04-04 19:16:03 +01:00
Till Hoffmann
3cb0a237c1 Fixed suggestions by Eugene Brevdo. 2016-04-01 17:51:39 +01:00
Till Hoffmann
57239f4a81 Added polygamma function. 2016-04-01 14:35:21 +01:00
Till Hoffmann
dd5d390daf Added zeta function. 2016-04-01 13:32:29 +01:00
Benoit Steiner
2e4e4cb74d Use numext::abs instead of abs to avoid incorrect conversion to integer of the argument 2016-03-23 16:57:12 -07:00
Eugene Brevdo
836e92a051 Update MathFunctions/SpecialFunctions with intelligent header guards. 2016-03-09 09:04:45 -08:00
Eugene Brevdo
14f0fde51f Add certain functions to numext (log, exp, tan) because CUDA doesn't support std::
Use these in SpecialFunctions.
2016-03-08 17:17:44 -08:00
Eugene Brevdo
6afea46838 Add infinity() support to numext::numeric_limits, use it in lgamma.
This makes the infinity access a __device__ function, removing
nvcc warnings.
2016-03-02 21:35:48 -08:00
Eugene Brevdo
06a2bc7c9c Tiny bugfix in SpecialFunctions: some compilers don't like doubles
implicitly downcast to floats in an array constructor.
2016-02-17 14:41:59 -08:00
Benoit Steiner
bcbde37a11 Made sure the code compiles when EIGEN_HAS_C99_MATH isn't defined 2016-02-03 14:53:08 -08:00
Gael Guennebaud
f50bb1e6f3 Fix compilation with gcc 2016-01-28 13:25:26 +01:00
Eugene Brevdo
c8d94ae944 digamma special function: merge shared code.
Moved type-specific code into a helper class digamma_impl_maybe_poly<Scalar>.
2016-01-27 09:52:29 -08:00
Eugene Brevdo
6a75e7e0d5 Digamma cleanup
* Added permission from cephes author to use his code
* Cleanup in ArrayCwiseUnaryOps
2016-01-15 16:32:21 -08:00
Eugene Brevdo
f2471f31e0 Modify constants in SpecialFunctions to lowercase (avoid name conflicts). 2015-12-28 17:48:38 -08:00
Eugene Brevdo
afb35385bf Change PI* to M_PI* in SpecialFunctions to avoid possible breakage
with external DEFINEs.
2015-12-28 17:34:06 -08:00
Eugene Brevdo
f7362772e3 Add digamma for CPU + CUDA. Includes tests. 2015-12-24 21:15:38 -08:00
Gael Guennebaud
4483c0fdf6 Fix unused variable warning. 2015-12-11 23:29:53 +01:00
Benoit Steiner
58e06447de Silence a compilation warning 2015-12-10 13:11:36 -08:00
Benoit Steiner
48877a6933 Only implement the lgamma, erf, and erfc functions when using a compiler compliant with the C99 specification. 2015-12-10 13:09:49 -08:00
Benoit Steiner
53b196aa5f Simplified the implementation of lgamma, erf, and erfc 2015-12-08 14:17:34 -08:00
Benoit Steiner
73b68d4370 Fixed a couple of typos
Cleaned up the code a bit.
2015-12-07 16:38:48 -08:00
Eugene Brevdo
fa4f933c0f Add special functions to Eigen: lgamma, erf, erfc.
Includes CUDA support and unit tests.
2015-12-07 15:24:49 -08:00