aboutsummaryrefslogtreecommitdiffstats
path: root/code/qcommon/q_math.c
diff options
context:
space:
mode:
authorludwig <ludwig@edf5b092-35ff-0310-97b2-ce42778d08ea>2008-11-03 17:03:54 +0000
committerludwig <ludwig@edf5b092-35ff-0310-97b2-ce42778d08ea>2008-11-03 17:03:54 +0000
commitb31e8a67d9b1f11b9943b595a4fd66d3a07dd085 (patch)
tree712bb692c851148cf64d90d53dce9c753fb83923 /code/qcommon/q_math.c
parent5502af97628223ea8f5192647cb1dd5dbd72ae3b (diff)
downloadioquake3-aero-b31e8a67d9b1f11b9943b595a4fd66d3a07dd085.tar.gz
ioquake3-aero-b31e8a67d9b1f11b9943b595a4fd66d3a07dd085.zip
fix strict aliasing issues
Patch by Przemysław Iskra (#3805) git-svn-id: svn://svn.icculus.org/quake3/trunk@1481 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'code/qcommon/q_math.c')
-rw-r--r--code/qcommon/q_math.c26
1 files changed, 10 insertions, 16 deletions
diff --git a/code/qcommon/q_math.c b/code/qcommon/q_math.c
index bfaa60a..80c9f8e 100644
--- a/code/qcommon/q_math.c
+++ b/code/qcommon/q_math.c
@@ -501,10 +501,7 @@ void VectorRotate( vec3_t in, vec3_t matrix[3], vec3_t out )
*/
float Q_rsqrt( float number )
{
- union {
- float f;
- int i;
- } t;
+ floatint_t t;
float x2, y;
const float threehalfs = 1.5F;
@@ -519,9 +516,10 @@ float Q_rsqrt( float number )
}
float Q_fabs( float f ) {
- int tmp = * ( int * ) &f;
- tmp &= 0x7FFFFFFF;
- return * ( float * ) &tmp;
+ floatint_t fi;
+ fi.f = f;
+ fi.i &= 0x7FFFFFFF;
+ return fi.f;
}
#endif
@@ -1301,15 +1299,11 @@ Don't pass doubles to this
*/
int Q_isnan( float x )
{
- union
- {
- float f;
- unsigned int i;
- } t;
+ floatint_t fi;
- t.f = x;
- t.i &= 0x7FFFFFFF;
- t.i = 0x7F800000 - t.i;
+ fi.f = x;
+ fi.ui &= 0x7FFFFFFF;
+ fi.ui = 0x7F800000 - fi.ui;
- return (int)( (unsigned int)t.i >> 31 );
+ return (int)( (unsigned int)fi.ui >> 31 );
}