diff --git a/manual/math.texi b/manual/math.texi
index 376306cfc5..e00871c303 100644
--- a/manual/math.texi
+++ b/manual/math.texi
@@ -131,9 +131,10 @@ defined.  The default set of features includes these constants.
 @xref{Feature Test Macros}.
 
 All values are of type @code{double}.  As an extension, @theglibc{}
-also defines these constants with type @code{long double}.  The
-@code{long double} macros have a lowercase @samp{l} appended to their
-names: @code{M_El}, @code{M_PIl}, and so forth.  These are only
+also defines these constants with type @code{long double} and
+@code{float}.  The @code{long double} macros have a lowercase @samp{l}
+while the @code{float} macros have a lowercase @samp{f} appended to
+their names: @code{M_El}, @code{M_PIl}, and so forth.  These are only
 available if @code{_GNU_SOURCE} is defined.
 
 Likewise, @theglibc{} also defines these constants with the types
diff --git a/math/k_casinh_template.c b/math/k_casinh_template.c
index d6ea6556b9..7bb575924b 100644
--- a/math/k_casinh_template.c
+++ b/math/k_casinh_template.c
@@ -56,7 +56,7 @@ M_DECL_FUNC (__kernel_casinh) (CFLOAT x, int adj)
 	}
 
       res = M_SUF (__clog) (y);
-      __real__ res += (FLOAT) M_MLIT (M_LN2);
+      __real__ res += M_MLIT (M_LN2);
     }
   else if (rx >= M_LIT (0.5) && ix < M_EPSILON / 8)
     {
diff --git a/math/math.h b/math/math.h
index 404d24dae6..47f737b9bc 100644
--- a/math/math.h
+++ b/math/math.h
@@ -1158,6 +1158,23 @@ iszero (__T __val)
 # define M_SQRT1_2	0.70710678118654752440	/* 1/sqrt(2) */
 #endif
 
+/* GNU extension to provide float constants with similar names.  */
+#ifdef __USE_GNU
+# define M_Ef		2.7182818284590452354f	/* e */
+# define M_LOG2Ef	1.4426950408889634074f	/* log_2 e */
+# define M_LOG10Ef	0.43429448190325182765f	/* log_10 e */
+# define M_LN2f		0.69314718055994530942f	/* log_e 2 */
+# define M_LN10f	2.30258509299404568402f	/* log_e 10 */
+# define M_PIf		3.14159265358979323846f	/* pi */
+# define M_PI_2f	1.57079632679489661923f	/* pi/2 */
+# define M_PI_4f	0.78539816339744830962f	/* pi/4 */
+# define M_1_PIf	0.31830988618379067154f	/* 1/pi */
+# define M_2_PIf	0.63661977236758134308f	/* 2/pi */
+# define M_2_SQRTPIf	1.12837916709551257390f	/* 2/sqrt(pi) */
+# define M_SQRT2f	1.41421356237309504880f	/* sqrt(2) */
+# define M_SQRT1_2f	0.70710678118654752440f	/* 1/sqrt(2) */
+#endif
+
 /* The above constants are not adequate for computation using `long double's.
    Therefore we provide as an extension constants with similar names as a
    GNU extension.  Provide enough digits for the 128-bit IEEE quad.  */
diff --git a/math/s_cacos_template.c b/math/s_cacos_template.c
index 8c014ecf29..e0d6654c46 100644
--- a/math/s_cacos_template.c
+++ b/math/s_cacos_template.c
@@ -32,7 +32,7 @@ M_DECL_FUNC (__cacos) (CFLOAT x)
     {
       y = M_SUF (__casin) (x);
 
-      __real__ res = (FLOAT) M_MLIT (M_PI_2) - __real__ y;
+      __real__ res = M_MLIT (M_PI_2) - __real__ y;
       if (__real__ res == 0)
 	__real__ res = 0;
       __imag__ res = -__imag__ y;
diff --git a/math/s_catan_template.c b/math/s_catan_template.c
index b9f8277511..b5307b3c51 100644
--- a/math/s_catan_template.c
+++ b/math/s_catan_template.c
@@ -106,7 +106,7 @@ M_DECL_FUNC (__catan) (CFLOAT x)
 	  if (M_FABS (__imag__ x) == 1
 	      && M_FABS (__real__ x) < M_EPSILON * M_EPSILON)
 	    __imag__ res = (M_COPYSIGN (M_LIT (0.5), __imag__ x)
-			    * ((FLOAT) M_MLIT (M_LN2)
+			    * (M_MLIT (M_LN2)
 			       - M_LOG (M_FABS (__real__ x))));
 	  else
 	    {
diff --git a/math/s_catanh_template.c b/math/s_catanh_template.c
index 63c14731ba..2327e48ca9 100644
--- a/math/s_catanh_template.c
+++ b/math/s_catanh_template.c
@@ -75,7 +75,7 @@ M_DECL_FUNC (__catanh) (CFLOAT x)
 	  if (M_FABS (__real__ x) == 1
 	      && M_FABS (__imag__ x) < M_EPSILON * M_EPSILON)
 	    __real__ res = (M_COPYSIGN (M_LIT (0.5), __real__ x)
-			    * ((FLOAT) M_MLIT (M_LN2)
+			    * (M_MLIT (M_LN2)
 			       - M_LOG (M_FABS (__imag__ x))));
 	  else
 	    {
diff --git a/math/s_clog10_template.c b/math/s_clog10_template.c
index 77b714a6c0..0c72db0b2e 100644
--- a/math/s_clog10_template.c
+++ b/math/s_clog10_template.c
@@ -72,7 +72,7 @@ M_DECL_FUNC (__clog10) (CFLOAT x)
       if (absx == 1 && scale == 0)
 	{
 	  __real__ result = (M_LOG1P (absy * absy)
-			     * ((FLOAT) M_MLIT (M_LOG10E) / 2));
+			     * (M_MLIT (M_LOG10E) / 2));
 	  math_check_force_underflow_nonneg (__real__ result);
 	}
       else if (absx > 1 && absx < 2 && absy < 1 && scale == 0)
@@ -80,7 +80,7 @@ M_DECL_FUNC (__clog10) (CFLOAT x)
 	  FLOAT d2m1 = (absx - 1) * (absx + 1);
 	  if (absy >= M_EPSILON)
 	    d2m1 += absy * absy;
-	  __real__ result = M_LOG1P (d2m1) * ((FLOAT) M_MLIT (M_LOG10E) / 2);
+	  __real__ result = M_LOG1P (d2m1) * (M_MLIT (M_LOG10E) / 2);
 	}
       else if (absx < 1
 	       && absx >= M_LIT (0.5)
@@ -88,7 +88,7 @@ M_DECL_FUNC (__clog10) (CFLOAT x)
 	       && scale == 0)
 	{
 	  FLOAT d2m1 = (absx - 1) * (absx + 1);
-	  __real__ result = M_LOG1P (d2m1) * ((FLOAT) M_MLIT (M_LOG10E) / 2);
+	  __real__ result = M_LOG1P (d2m1) * (M_MLIT (M_LOG10E) / 2);
 	}
       else if (absx < 1
 	       && absx >= M_LIT (0.5)
@@ -96,7 +96,7 @@ M_DECL_FUNC (__clog10) (CFLOAT x)
 	       && absx * absx + absy * absy >= M_LIT (0.5))
 	{
 	  FLOAT d2m1 = M_SUF (__x2y2m1) (absx, absy);
-	  __real__ result = M_LOG1P (d2m1) * ((FLOAT) M_MLIT (M_LOG10E) / 2);
+	  __real__ result = M_LOG1P (d2m1) * (M_MLIT (M_LOG10E) / 2);
 	}
       else
 	{
diff --git a/math/s_clog_template.c b/math/s_clog_template.c
index 0f6360cdc8..72414a812b 100644
--- a/math/s_clog_template.c
+++ b/math/s_clog_template.c
@@ -32,7 +32,7 @@ M_DECL_FUNC (__clog) (CFLOAT x)
   if (__glibc_unlikely (rcls == FP_ZERO && icls == FP_ZERO))
     {
       /* Real and imaginary part are 0.0.  */
-      __imag__ result = signbit (__real__ x) ? (FLOAT) M_MLIT (M_PI) : 0;
+      __imag__ result = signbit (__real__ x) ? M_MLIT (M_PI) : 0;
       __imag__ result = M_COPYSIGN (__imag__ result, __imag__ x);
       /* Yes, the following line raises an exception.  */
       __real__ result = -1 / M_FABS (__real__ x);
@@ -94,7 +94,7 @@ M_DECL_FUNC (__clog) (CFLOAT x)
       else
 	{
 	  FLOAT d = M_HYPOT (absx, absy);
-	  __real__ result = M_LOG (d) - scale * (FLOAT) M_MLIT (M_LN2);
+	  __real__ result = M_LOG (d) - scale * M_MLIT (M_LN2);
 	}
 
       __imag__ result = M_ATAN2 (__imag__ x, __real__ x);
diff --git a/sysdeps/generic/math-type-macros-float.h b/sysdeps/generic/math-type-macros-float.h
index 5ba7615500..cf7ba5d6a3 100644
--- a/sysdeps/generic/math-type-macros-float.h
+++ b/sysdeps/generic/math-type-macros-float.h
@@ -27,9 +27,8 @@
 #define M_STRTO_NAN __strtof_nan
 #define M_USE_BUILTIN(c) USE_ ##c ##F_BUILTIN
 
-/* Standard/GNU macro literals do not exist for the float type.  Use
-   the double macro constants.  */
-#define M_MLIT(c) c
+/* GNU extension float constant macros.  */
+#define M_MLIT(c) c ## f
 
 #include <libm-alias-float.h>
 #include <math-nan-payload-float.h>
diff --git a/sysdeps/ieee754/flt-32/e_gammaf_r.c b/sysdeps/ieee754/flt-32/e_gammaf_r.c
index 974ed67c96..3fcfc581b3 100644
--- a/sysdeps/ieee754/flt-32/e_gammaf_r.c
+++ b/sysdeps/ieee754/flt-32/e_gammaf_r.c
@@ -85,7 +85,7 @@ gammaf_positive (float x, int *exp2_adj)
       float x_adj_frac = x_adj - x_adj_int;
       int x_adj_log2;
       float x_adj_mant = __frexpf (x_adj, &x_adj_log2);
-      if (x_adj_mant < (float) M_SQRT1_2)
+      if (x_adj_mant < M_SQRT1_2f)
 	{
 	  x_adj_log2--;
 	  x_adj_mant *= 2.0f;
@@ -94,7 +94,7 @@ gammaf_positive (float x, int *exp2_adj)
       float ret = (__ieee754_powf (x_adj_mant, x_adj)
 		   * __ieee754_exp2f (x_adj_log2 * x_adj_frac)
 		   * __ieee754_expf (-x_adj)
-		   * sqrtf (2 * (float) M_PI / x_adj)
+		   * sqrtf (2 * M_PIf / x_adj)
 		   / prod);
       exp_adj += x_eps * __ieee754_logf (x_adj);
       float bsum = gamma_coeff[NCOEFF - 1];
@@ -176,11 +176,11 @@ __ieee754_gammaf_r (float x, int *signgamp)
 	      if (frac > 0.5f)
 		frac = 1.0f - frac;
 	      float sinpix = (frac <= 0.25f
-			      ? __sinf ((float) M_PI * frac)
-			      : __cosf ((float) M_PI * (0.5f - frac)));
+			      ? __sinf (M_PIf * frac)
+			      : __cosf (M_PIf * (0.5f - frac)));
 	      int exp2_adj;
-	      float tret = (float) M_PI / (-x * sinpix
-					   * gammaf_positive (-x, &exp2_adj));
+	      float tret = M_PIf / (-x * sinpix
+				    * gammaf_positive (-x, &exp2_adj));
 	      ret = __scalbnf (tret, -exp2_adj);
 	      math_check_force_underflow_nonneg (ret);
 	    }
diff --git a/sysdeps/ieee754/flt-32/e_j0f.c b/sysdeps/ieee754/flt-32/e_j0f.c
index 0453a30109..9ae91a9dcc 100644
--- a/sysdeps/ieee754/flt-32/e_j0f.c
+++ b/sysdeps/ieee754/flt-32/e_j0f.c
@@ -233,7 +233,7 @@ j0f_near_root (float x, float z)
   float index_f;
   int index;
 
-  index_f = roundf ((x - FIRST_ZERO_J0) / (float) M_PI);
+  index_f = roundf ((x - FIRST_ZERO_J0) / M_PIf);
   /* j0f_asympt fails to give an error <= 9 ulps for x=0x1.324e92p+7
      (index 48) thus we can't reduce SMALL_SIZE below 49.  */
   if (index_f >= SMALL_SIZE)
@@ -514,7 +514,7 @@ y0f_near_root (float x, float z)
   float index_f;
   int index;
 
-  index_f = roundf ((x - FIRST_ZERO_Y0) / (float) M_PI);
+  index_f = roundf ((x - FIRST_ZERO_Y0) / M_PIf);
   if (index_f >= SMALL_SIZE)
     return y0f_asympt (x);
   index = (int) index_f;
diff --git a/sysdeps/ieee754/flt-32/e_j1f.c b/sysdeps/ieee754/flt-32/e_j1f.c
index 052c661db9..ade10402fd 100644
--- a/sysdeps/ieee754/flt-32/e_j1f.c
+++ b/sysdeps/ieee754/flt-32/e_j1f.c
@@ -243,7 +243,7 @@ j1f_near_root (float x, float z)
       x = -x;
       sign = -1.0f;
     }
-  index_f = roundf ((x - FIRST_ZERO_J1) / (float) M_PI);
+  index_f = roundf ((x - FIRST_ZERO_J1) / M_PIf);
   if (index_f >= SMALL_SIZE)
     return sign * j1f_asympt (x);
   index = (int) index_f;
@@ -525,7 +525,7 @@ y1f_near_root (float x, float z)
   float index_f;
   int index;
 
-  index_f = roundf ((x - FIRST_ZERO_Y1) / (float) M_PI);
+  index_f = roundf ((x - FIRST_ZERO_Y1) / M_PIf);
   if (index_f >= SMALL_SIZE)
     return y1f_asympt (x);
   index = (int) index_f;
diff --git a/sysdeps/ieee754/flt-32/e_jnf.c b/sysdeps/ieee754/flt-32/e_jnf.c
index 80b684dd97..ff0a9d7c63 100644
--- a/sysdeps/ieee754/flt-32/e_jnf.c
+++ b/sysdeps/ieee754/flt-32/e_jnf.c
@@ -134,7 +134,7 @@ __ieee754_jnf(int n, float x)
 		tmp = n;
 		v = two/x;
 		tmp = tmp*__ieee754_logf(fabsf(v*tmp));
-		if(tmp<(float)8.8721679688e+01) {
+		if(tmp<8.8721679688e+01f) {
 		    for(i=n-1,di=(float)(i+i);i>0;i--){
 			temp = b;
 			b *= di;
diff --git a/sysdeps/ieee754/flt-32/lgamma_negf.c b/sysdeps/ieee754/flt-32/lgamma_negf.c
index ba6ada8f7e..d1128cc91c 100644
--- a/sysdeps/ieee754/flt-32/lgamma_negf.c
+++ b/sysdeps/ieee754/flt-32/lgamma_negf.c
@@ -165,9 +165,9 @@ static float
 lg_sinpi (float x)
 {
   if (x <= 0.25f)
-    return __sinf ((float) M_PI * x);
+    return __sinf (M_PIf * x);
   else
-    return __cosf ((float) M_PI * (0.5f - x));
+    return __cosf (M_PIf * (0.5f - x));
 }
 
 /* Compute cos (pi * X) for -0.25 <= X <= 0.5.  */
@@ -176,9 +176,9 @@ static float
 lg_cospi (float x)
 {
   if (x <= 0.25f)
-    return __cosf ((float) M_PI * x);
+    return __cosf (M_PIf * x);
   else
-    return __sinf ((float) M_PI * (0.5f - x));
+    return __sinf (M_PIf * (0.5f - x));
 }
 
 /* Compute cot (pi * X) for -0.25 <= X <= 0.5.  */
diff --git a/sysdeps/ieee754/flt-32/s_log1pf.c b/sysdeps/ieee754/flt-32/s_log1pf.c
index 6630f5a78e..555f0f82c8 100644
--- a/sysdeps/ieee754/flt-32/s_log1pf.c
+++ b/sysdeps/ieee754/flt-32/s_log1pf.c
@@ -92,7 +92,7 @@ __log1pf(float x)
 		if(k==0) return zero;
 		else {c += k*ln2_lo; return k*ln2_hi+c;}
 	    }
-	    R = hfsq*((float)1.0-(float)0.66666666666666666*f);
+	    R = hfsq*(1.0f-0.66666666666666666f*f);
 	    if(k==0) return f-R; else
 		     return k*ln2_hi-((R-(k*ln2_lo+c))-f);
 	}
