Commit d73bb388 authored by Michael Tesch's avatar Michael Tesch
Browse files

of course windows doesnt have normal POSIX stuff like signgam.

parent 8c61a70b
Loading
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -31,6 +31,12 @@
#endif
#endif

/// Configure whether system has POSIX extern int signgam;
#ifndef CPPDUALS_HAVE_SIGNGAM
#ifndef _WIN32
#define CPPDUALS_HAVE_SIGNGAM 1
#endif
#endif
namespace duals {

/**
@@ -1020,11 +1026,15 @@ template<class T> dual<T> lgamma(const dual<T> & x) {
  if (x.dpart() == T(0))
    return v;
  else {
#if CPPDUALS_HAVE_SIGNGAM
    int signgam_saved = signgam;
#endif
    int errno_saved = errno;
    T h(T(1) / (1ull << (std::numeric_limits<T>::digits / 3)));
    T w((lgamma(x.rpart()+h) - lgamma(x.rpart()-h))/(2*h));
#if CPPDUALS_HAVE_SIGNGAM
    signgam = signgam_saved;
#endif
    errno = errno_saved;
    return dual<T>(v, x.dpart() * w);
  }