Index: src/nmath/dnbeta.c
--- src/nmath/dnbeta.c.orig	2013-03-06 00:02:41.000000000 +0100
+++ src/nmath/dnbeta.c	2015-04-20 20:17:52.329200028 +0200
@@ -118,7 +118,7 @@
 	sum += term;
     } while (term > sum * eps);
 
-#ifdef HAVE_LONG_DOUBLE
+#if defined(HAVE_LONG_DOUBLE) && !defined(__FreeBSD__)
     return R_D_exp((double)(p_k + logl(sum)));
 #else
     return R_D_exp((double)(p_k + log(sum)));
Index: src/nmath/pgamma.c
--- src/nmath/pgamma.c.orig	2015-03-19 00:04:00.000000000 +0100
+++ src/nmath/pgamma.c	2015-04-20 20:18:52.740085978 +0200
@@ -252,7 +252,7 @@
  *
  * without causing overflows or throwing much accuracy.
  */
-#ifdef HAVE_LONG_DOUBLE
+#if defined(HAVE_LONG_DOUBLE) && !defined(__FreeBSD__)
 # define EXP expl
 # define LOG logl
 #else
Index: src/nmath/pnbeta.c
--- src/nmath/pnbeta.c.orig	2014-03-13 00:03:20.000000000 +0100
+++ src/nmath/pnbeta.c	2015-04-20 20:18:24.989193826 +0200
@@ -92,7 +92,7 @@
 
     /* return R_DT_val(ans), but we want to warn about cancellation here */
     if (lower_tail)
-#ifdef HAVE_LONG_DOUBLE
+#if defined(HAVE_LONG_DOUBLE) && !defined(__FreeBSD__)
 	return (double) (log_p ? logl(ans) : ans);
 #else
 	return log_p ? log(ans) : ans;
Index: src/nmath/pnchisq.c
--- src/nmath/pnchisq.c.orig	2014-04-23 00:15:04.000000000 +0200
+++ src/nmath/pnchisq.c	2015-04-20 20:19:13.409182190 +0200
@@ -29,7 +29,7 @@
  * bad precision & non-convergence in some cases (x ~= f, both LARGE)
  */
 
-#ifdef HAVE_LONG_DOUBLE
+#if defined(HAVE_LONG_DOUBLE) && !defined(__FreeBSD__)
 # define EXP expl
 # define FABS fabsl
 # define LOG logl
