aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS5
-rw-r--r--manual/math.texi7
-rw-r--r--math/k_casinh_template.c2
-rw-r--r--math/math.h17
-rw-r--r--math/s_cacos_template.c2
-rw-r--r--math/s_catan_template.c2
-rw-r--r--math/s_catanh_template.c2
-rw-r--r--math/s_clog10_template.c8
-rw-r--r--math/s_clog_template.c4
-rw-r--r--sysdeps/generic/math-type-macros-float.h5
-rw-r--r--sysdeps/ieee754/flt-32/e_gammaf_r.c12
-rw-r--r--sysdeps/ieee754/flt-32/e_j0f.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_j1f.c4
-rw-r--r--sysdeps/ieee754/flt-32/e_jnf.c2
-rw-r--r--sysdeps/ieee754/flt-32/lgamma_negf.c8
-rw-r--r--sysdeps/ieee754/flt-32/s_log1pf.c2
16 files changed, 54 insertions, 32 deletions
diff --git a/NEWS b/NEWS
index eb68bb1..a957b19 100644
--- a/NEWS
+++ b/NEWS
@@ -43,6 +43,11 @@ Major new features:
fminimum_mag, fminimum_mag_num and corresponding functions for float,
long double, _FloatN and _FloatNx.
+* <math.h> macros for single-precision float constants are added as a
+ GNU extension: M_Ef, M_LOG2Ef, M_LOG10Ef, M_LN2f, M_LN10f, M_PIf,
+ M_PI_2f, M_PI_4f, M_1_PIf, M_2_PIf, M_2_SQRTPIf, M_SQRT2f and
+ M_SQRT1_2f.
+
* The __STDC_IEC_60559_BFP__ and __STDC_IEC_60559_COMPLEX__ macros are
predefined as specified in TS 18661-1:2014.
diff --git a/manual/math.texi b/manual/math.texi
index 376306c..e00871c 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 98980dc..e9fdc97 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 7bd56c9..27963ef 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 644330f..eaf7c80 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 be3459c..6a89309 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 59c8e36..7b57dda 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 f5a0873..e50bd6c 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 3b25bc9..eff3d48 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 5ee0ec3..3299abc 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 782beaa..3db8463 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 0453a30..9ae91a9 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 052c661..ade1040 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 80b684d..ff0a9d7 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 756742e..541b5a3 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 6630f5a..555f0f8 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);
}