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

Jan Vesely jan.vesely at rutgers.edu
Tue Mar 11 11:15:22 PDT 2014


On Tue, 2014-03-11 at 10:50 -0700, Matt Arsenault wrote:
> 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. 

type-punning is afaik legal in c99 (implementation defined in c89),
"man gcc" includes an example same as this use-case

quick search gives this:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_283.htm

although I'd ask the same question as Jeroen,

what's wrong with 3.14159274101257f ?

regards,

> 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
> 
> 
> 
> 
> _______________________________________________
> Libclc-dev mailing list
> Libclc-dev at pcc.me.uk
> http://www.pcc.me.uk/cgi-bin/mailman/listinfo/libclc-dev

-- 
Jan Vesely <jan.vesely at rutgers.edu>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/libclc-dev/attachments/20140311/c9f8fa7f/attachment.sig>


More information about the Libclc-dev mailing list