[Rcpp-commits] r2065 - deprecated deprecated/msvc pkg/Rcpp/inst/include/Rcpp
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Fri Sep 3 04:53:32 CEST 2010
Author: edd
Date: 2010-09-03 04:53:31 +0200 (Fri, 03 Sep 2010)
New Revision: 2065
Added:
deprecated/msvc/
deprecated/msvc/msvcmath.cpp
Removed:
pkg/Rcpp/inst/include/Rcpp/msvc/
Log:
undoing msvc part 1
Copied: deprecated/msvc/msvcmath.cpp (from rev 2063, pkg/Rcpp/src/msvcmath.cpp)
===================================================================
--- deprecated/msvc/msvcmath.cpp (rev 0)
+++ deprecated/msvc/msvcmath.cpp 2010-09-03 02:53:31 UTC (rev 2065)
@@ -0,0 +1,52 @@
+#ifdef _MSC_VER
+
+#include <math.h>
+#include <stdexcept>
+#include <Rcpp/msvc/math.h>
+
+// This is adapted from code by John D. Cook, released to public domain.
+// See http://www.johndcook.com/math_h.html.
+
+double log1p(double x) {
+ if(x <= -1.0)
+ throw std::range_error("log1p: arg <= -1");
+ if(fabs(x) > 1.e-4)
+ return log(1.0 + x);
+ return (-0.5*x + 1.0)*x;
+}
+
+double erf(double x)
+{
+ // constants
+ double a1 = 0.254829592;
+ double a2 = -0.284496736;
+ double a3 = 1.421413741;
+ double a4 = -1.453152027;
+ double a5 = 1.061405429;
+ double p = 0.3275911;
+
+ // Save the sign of x
+ int sign = 1;
+ if (x < 0)
+ sign = -1;
+ x = fabs(x);
+
+ // A&S formula 7.1.26
+ double t = 1.0/(1.0 + p*x);
+ double y = 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x);
+
+ return sign*y;
+}
+
+// Compute exp(x) - 1 without loss of precision for small values of x.
+double expm1(double x)
+{
+ if (fabs(x) < 1e-5)
+ return x + 0.5*x*x;
+ else
+ return exp(x) - 1.0;
+}
+#else
+// so that there is a symbol in this file
+void dummy_msvc(){}
+#endif
More information about the Rcpp-commits
mailing list