[Libclc-dev] [PATCH] Add definition for M_PI_F v2

Matt Arsenault Matthew.Arsenault at amd.com
Tue Mar 11 10:50:33 PDT 2014


On 03/11/2014 08:38 AM, Tom Stellard wrote:
> v2:
>    - Use a hexadecimal constant.
> ---
>   generic/include/clc/float/definitions.h | 11 +++++++++++
>   1 file changed, 11 insertions(+)
>
> diff --git a/generic/include/clc/float/definitions.h b/generic/include/clc/float/definitions.h
> index e6ef1d8..a6c947f 100644
> --- a/generic/include/clc/float/definitions.h
> +++ b/generic/include/clc/float/definitions.h
> @@ -9,6 +9,17 @@
>   #define FLT_MIN 	0x1.0p-126f
>   #define FLT_EPSILON 	0x1.0p-23f
>   
> +_CLC_INLINE static float m_pi_f() {
> +  union {
> +    unsigned i;
> +    float f;
> +  } pi;
> +  pi.i = 0x40490fdb;
> +  return pi.f;
> +}
> +
> +#define M_PI_F m_pi_f()
> +
>   #ifdef cl_khr_fp64
>   
>   #define DBL_DIG 	15
I think this is technically undefined behavior that everyone violates. 
If you want the hex constant, you could use the format that comes out of 
the %a format specifier:

     float cast = M_PI;
     printf("M_PI  %a\n", M_PI);
     printf("M_PI cast float: %a\n", cast);

Gives me:

M_PI  0x1.921fb54442d18p+1
M_PI cast float: 0x1.921fb6p+1







More information about the Libclc-dev mailing list