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