diff --git a/pd/src/m_pd.h b/pd/src/m_pd.h
index 209dbcafb4c215787f2eda799cd54890b6bd2da5..8dab0a9f0cf58b3a444e27f5b2b247bd9764102c 100644
--- a/pd/src/m_pd.h
+++ b/pd/src/m_pd.h
@@ -89,9 +89,19 @@ typedef unsigned __int64  uint64_t;
 #if !defined(PD_LONGINTTYPE)
 #define PD_LONGINTTYPE long
 #endif
-#if !defined(PD_FLOATTYPE)
+
+#if !defined(PD_FLOAT_PRECISION)
+#define PD_FLOAT_PRECISION 32   /* 32 for single precision or 64 for double precision */
+#endif
+
+#if PD_FLOAT_PRECISION == 32
 #define PD_FLOATTYPE float
+#elif PD_FLOAT_PRECISION == 64
+#define PD_FLOATTYPE double
+#else
+#error invalid PD_FLOATPRECISION: must be 32 or 64
 #endif
+
 typedef PD_LONGINTTYPE t_int;       /* pointer-size integer */
 typedef PD_FLOATTYPE t_float;       /* a float type at most the same size */
 typedef PD_FLOATTYPE t_floatarg;    /* float type for function calls */