* Added Q_isnan for NaN tests with -ffast-math

* Fixed UT/OpenAL work around
This commit is contained in:
Tim Angus 2006-01-19 20:28:12 +00:00
parent 73e4d33d3b
commit 58c8175024
3 changed files with 27 additions and 9 deletions

View file

@ -492,15 +492,12 @@ S_AL_SanitiseVector
#define S_AL_SanitiseVector(v) _S_AL_SanitiseVector(v,__LINE__)
static void _S_AL_SanitiseVector( vec3_t v, int line )
{
// NaNs can't be compared for equality, thus always fail this test
if( v[ 0 ] == v[ 0 ] &&
v[ 1 ] == v[ 1 ] &&
v[ 2 ] == v[ 2 ] )
return;
Com_DPrintf( S_COLOR_YELLOW "WARNING: vector with one or more NaN components "
"being passed to OpenAL at %s:%d -- zeroing\n", __FILE__, line );
VectorClear( v );
if( Q_isnan( v[ 0 ] ) || Q_isnan( v[ 1 ] ) || Q_isnan( v[ 2 ] ) )
{
Com_DPrintf( S_COLOR_YELLOW "WARNING: vector with one or more NaN components "
"being passed to OpenAL at %s:%d -- zeroing\n", __FILE__, line );
VectorClear( v );
}
}
/*

View file

@ -1252,4 +1252,24 @@ void PerpendicularVector( vec3_t dst, const vec3_t src )
VectorNormalize( dst );
}
/*
================
Q_isnan
Don't pass doubles to this
================
*/
int Q_isnan( float x )
{
union
{
float f;
unsigned int i;
} t;
t.f = x;
t.i &= 0x7FFFFFFF;
t.i = 0x7F800000 - t.i;
return (int)( (unsigned int)t.i >> 31 );
}

View file

@ -557,6 +557,7 @@ void MakeNormalVectors( const vec3_t forward, vec3_t right, vec3_t up );
void MatrixMultiply(float in1[3][3], float in2[3][3], float out[3][3]);
void AngleVectors( const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up);
void PerpendicularVector( vec3_t dst, const vec3_t src );
int Q_isnan( float x );
//=============================================