aster94 / SensorFusion

A simple implementation of some complex Sensor Fusion algorithms
GNU General Public License v3.0
197 stars 41 forks source link

Avoid warnings about `type-punned` #12

Closed markub3327 closed 1 year ago

markub3327 commented 1 year ago

Hello,

you used for estimating inverse square root old solution and modern compiler gives me warning:

/Users/martin/Documents/Arduino/libraries/SensorFusion/src/SensorFusion.cpp: In static member function 'static float SF::invSqrt(float)':
/Users/martin/Documents/Arduino/libraries/SensorFusion/src/SensorFusion.cpp:61:20: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  long i = *(long*)&y;
                    ^
/Users/martin/Documents/Arduino/libraries/SensorFusion/src/SensorFusion.cpp:63:16: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  y = *(float*)&i;
                ^

The better way is using union as a trick. Thanks.

aster94 commented 1 year ago

ok, thanks

aster94 commented 1 year ago

We should return 'f' instead of 'y' after your changes, I am noticing only now 😅

markub3327 commented 1 year ago

Should you reject this PR?