Ulrich Lauther <[EMAIL PROTECTED]> writes:

> inline bool almost_equal(float a, float b, int maxUlps = 16) {
>   if (a == b) return true; 
>   int intDiff = abs(*(reinterpret_cast<int*>(&a)) -
>                   *(reinterpret_cast<int*>(&b)));
>   return intDiff <= maxUlps;
> }
>
> I get the warning: warning: dereferencing type-punned pointer will
> break strict-aliasing rules

Seems a mild punishment for such an atrocity.


> How can I avoid this? (Using a union would imply unneeded copying af
> a and b).

And undefined behavior again.


What about the straightforward

return fabs(a-b)<maxUlps;

?
_______________________________________________
help-gplusplus mailing list
help-gplusplus@gnu.org
http://lists.gnu.org/mailman/listinfo/help-gplusplus

Reply via email to