On Fri, 6 Jan 2017 16:37:10 -0200 Gustavo Sverzut Barbieri <barbi...@gmail.com>
said:

> Hi mike,
> 
> This isn't good for a number of reasons... first the non-inline nature
> will add more symbols and a reasonable penalty. Secondly it just
> pushes the warning out of the code... to do something like that, maybe
> it's more reasonable to just turn the comparison into a memcmp() if
> we're looking for an identical value, usually to skip computations
> when it didn't change (although there a reasonable epsilon would
> increase hit ratio and speed up even further).

i agree. real funcs for this is bad. static inlines or macros. the pragma
diagnostic could be pushed and popped inside a static inline declaration... or
indeed become a memcmp(), tho this may even become a real function and more
overhead than a == b.

but this is a step in the right direction - just static inlines in headers
instead of real funcs+syms with real calls to them.

> 1 - static inline this kind of things;
> 
> 2 - to achieve what you're proposing (not using an epsilon),
> memcmp(&a, &b) == 0 would be better (and likely faster since compilers
> will expand that to comparing the bytes without any call).
> 
> 
> 
> 
> On Fri, Jan 6, 2017 at 3:57 PM, Mike Blumenkrantz
> <michael.blumenkra...@gmail.com> wrote:
> > discomfitor pushed a commit to branch master.
> >
> > http://git.enlightenment.org/core/efl.git/commit/?id=1b4c26be8e9630ae0c367b914f893161c968799a
> >
> > commit 1b4c26be8e9630ae0c367b914f893161c968799a
> > Author: Mike Blumenkrantz <zm...@osg.samsung.com>
> > Date:   Fri Jan 6 12:57:46 2017 -0500
> >
> >     eina: add functions for warningless exact comparisons of floats
> >
> >     in some cases a user does want to check exact values, so these functions
> >     should be used to indicate this intent
> >
> >     needs windows support
> >
> >     @feature
> > ---
> >  src/lib/eina/eina_util.c | 32 ++++++++++++++++++++++++++++++++
> >  src/lib/eina/eina_util.h | 20 ++++++++++++++++++++
> >  2 files changed, 52 insertions(+)
> >
> > diff --git a/src/lib/eina/eina_util.c b/src/lib/eina/eina_util.c
> > index 62e1a79..a358884 100644
> > --- a/src/lib/eina/eina_util.c
> > +++ b/src/lib/eina/eina_util.c
> > @@ -100,3 +100,35 @@ eina_environment_tmp_get(void)
> >     return tmp;
> >  #endif
> >  }
> > +
> > +#if defined(_MSC_VER)
> > +#elif defined(__clang__)
> > +#  pragma clang diagnostic push
> > +#  pragma clang diagnostic ignored "-Wfloat-equal"
> > +#elif defined(__GNUC__)
> > +# if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406
> > +#  pragma GCC diagnostic push
> > +#  pragma GCC diagnostic ignored "-Wfloat-equal"
> > +# endif
> > +#endif
> > +
> > +EAPI Eina_Bool
> > +eina_dbleq(double a, double b)
> > +{
> > +   return a == b;
> > +}
> > +
> > +EAPI Eina_Bool
> > +eina_flteq(float a, float b)
> > +{
> > +   return a == b;
> > +}
> > +
> > +#if defined(_MSC_VER)
> > +#elif defined(__clang__)
> > +#  pragma clang diagnostic pop
> > +#elif defined(__GNUC__)
> > +# if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406
> > +#  pragma GCC diagnostic pop
> > +# endif
> > +#endif
> > diff --git a/src/lib/eina/eina_util.h b/src/lib/eina/eina_util.h
> > index 66e0d17..3796dcb 100644
> > --- a/src/lib/eina/eina_util.h
> > +++ b/src/lib/eina/eina_util.h
> > @@ -50,6 +50,26 @@ EAPI const char *eina_environment_home_get(void);
> >  EAPI const char *eina_environment_tmp_get(void);
> >
> >  /**
> > + * @brief Warningless comparison of doubles using ==
> > + * @param a First member to compare
> > + * @param b Second member to compare
> > + *
> > + * @return @c true if two doubles match
> > + * @since 1.19
> > + */
> > +EAPI Eina_Bool eina_dbleq(double a, double b);
> > +
> > +/**
> > + * @brief Warningless comparison of floats using ==
> > + * @param a First member to compare
> > + * @param b Second member to compare
> > + *
> > + * @return @c true if two floats match
> > + * @since 1.19
> > + */
> > +EAPI Eina_Bool eina_flteq(float a, float b);
> > +
> > +/**
> >   * @brief Safe comparison of float
> >   * @param a First member to compar
> >   * @param b Second member to compar
> >
> > --
> >
> >
> 
> 
> 
> -- 
> Gustavo Sverzut Barbieri
> --------------------------------------
> Mobile: +55 (16) 99354-9890
> 
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most 
> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> _______________________________________________
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> 


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to