git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5000 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
50 lines
1.4 KiB
C
50 lines
1.4 KiB
C
// Wild Magic Source Code
|
|
// David Eberly
|
|
// http://www.geometrictools.com
|
|
// Copyright (c) 1998-2007
|
|
//
|
|
// This library is free software; you can redistribute it and/or modify it
|
|
// under the terms of the GNU Lesser General Public License as published by
|
|
// the Free Software Foundation; either version 2.1 of the License, or (at
|
|
// your option) any later version. The license is available for reading at
|
|
// either of the locations:
|
|
// http://www.gnu.org/copyleft/lgpl.html
|
|
// http://www.geometrictools.com/License/WildMagicLicense.pdf
|
|
// The license applies to versions 0 through 4 of Wild Magic.
|
|
//
|
|
// Version: 4.0.0 (2006/06/28)
|
|
|
|
#ifndef WM4MATHMCR_H
|
|
#define WM4MATHMCR_H
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
// Fast conversion from a IEEE 32-bit floating point number F in [0,1] to a
|
|
// a 32-bit integer I in [0,2^L-1].
|
|
//
|
|
// fFloat = F
|
|
// iLog = L
|
|
// iInt = I
|
|
|
|
#define WM4_SCALED_FLOAT_TO_INT(fFloat,iLog,iInt)\
|
|
{ \
|
|
int iShift = 150 - iLog - ((*(int*)(&fFloat) >> 23) & 0xFF); \
|
|
if ( iShift < 24 ) \
|
|
{ \
|
|
iInt = ((*(int*)(&fFloat) & 0x007FFFFF) | \
|
|
0x00800000) >> iShift; \
|
|
if ( iInt == (1 << iLog) ) \
|
|
{ \
|
|
iInt--; \
|
|
} \
|
|
} \
|
|
else \
|
|
{ \
|
|
iInt = 0; \
|
|
} \
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
#endif
|