Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

FCompare.h

Go to the documentation of this file.
00001 /*
00002     File:       FCompare.h
00003 
00004     Function:   float comparisons
00005 
00006 */
00007 
00008 #ifndef __FCompare__
00009 #define __FCompare__
00010 
00011 //
00012 // IEEE single float value tolerance equal macro by Toshi Kato ( July/28/93 )
00013 //
00014 
00015 #define FLOAT_EQUAL(a,b,m)  FLOAT_EQINT0(*(unsigned int *)&a,*(unsigned int *)&b,m)
00016 #define FLOAT_EQINT0(a,b,m) ((a)<(b)?FLOAT_EQINT1(b,a,m):FLOAT_EQINT1(a,b,m))
00017 #define FLOAT_EQINT1(a,b,m) (m>((a)-(b)))
00018 
00019 //
00020 // IEEE single float value tolerance equal macro ( Do not use in case of == 0.0 )
00021 //
00022 #define F_EQ6(a,b)  FLOAT_EQUAL(a,b,0x3f)                               //  6bit mask
00023 #define F_EQ7(a,b)  FLOAT_EQUAL(a,b,0x7f)                               //  7bit mask
00024 #define F_EQ8(a,b)  FLOAT_EQUAL(a,b,0xff)                               //  8bit mask
00025 #define F_EQ9(a,b)  FLOAT_EQUAL(a,b,0x1ff)                              //  9bit mask
00026 #define F_EQ10(a,b) FLOAT_EQUAL(a,b,0x3ff)                              // 10bit mask
00027 #define F_EQ11(a,b) FLOAT_EQUAL(a,b,0x7ff)                              // 11bit mask
00028 #define F_EQ12(a,b) FLOAT_EQUAL(a,b,0xfff)                              // 12bit mask
00029 #define F_EQ13(a,b) FLOAT_EQUAL(a,b,0x1fff)                             // 13bit mask
00030 #define F_EQ14(a,b) FLOAT_EQUAL(a,b,0x3fff)                             // 14bit mask
00031 #define F_EQ15(a,b) FLOAT_EQUAL(a,b,0x7fff)                             // 15bit mask
00032 #define F_EQ16(a,b) FLOAT_EQUAL(a,b,0xffff)                             // 16bit mask
00033 #define F_EQ17(a,b) FLOAT_EQUAL(a,b,0x1ffff)                            // 17bit mask
00034 #define F_EQ18(a,b) FLOAT_EQUAL(a,b,0x3ffff)                            // 18bit mask
00035 #define F_EQ19(a,b) FLOAT_EQUAL(a,b,0x7ffff)                            // 19bit mask
00036 #define F_EQ20(a,b) FLOAT_EQUAL(a,b,0xfffff)                            // 20bit mask
00037 
00038 //
00039 // IEEE single float value tolerance equal 1.0 macro ( i.e. == 1.0 )
00040 //
00041 #define F_EQ1_6(a)  FLOAT_EQINT0(*(unsigned int *)&a,0x3f800000,0x3f)   //  6bit mask
00042 #define F_EQ1_7(a)  FLOAT_EQINT0(*(unsigned int *)&a,0x3f800000,0x7f)   //  7bit mask
00043 #define F_EQ1_8(a)  FLOAT_EQINT0(*(unsigned int *)&a,0x3f800000,0xff)   //  8bit mask
00044 #define F_EQ1_9(a)  FLOAT_EQINT0(*(unsigned int *)&a,0x3f800000,0x1ff)  //  9bit mask
00045 #define F_EQ1_10(a) FLOAT_EQINT0(*(unsigned int *)&a,0x3f800000,0x3ff)  // 10bit mask
00046 
00047 //
00048 // IEEE single float value tolerance equal or greater than macro ( i.e. <= )
00049 //
00050 #define FLOAT_EQG(a,b,m)    FLOAT_EQGINT(*(unsigned int *)&a,*(unsigned int *)&b,m)
00051 #define FLOAT_EQGINT(a,b,m) ((a)<(b)?1:FLOAT_EQINT1(a,b,m))
00052 
00053 #define F_EQG6(a,b)  FLOAT_EQG(a,b,0x3f)                                //  6bit mask
00054 #define F_EQG7(a,b)  FLOAT_EQG(a,b,0x7f)                                //  7bit mask
00055 #define F_EQG8(a,b)  FLOAT_EQG(a,b,0xff)                                //  8bit mask
00056 #define F_EQG9(a,b)  FLOAT_EQG(a,b,0x1ff)                               //  9bit mask
00057 #define F_EQG10(a,b) FLOAT_EQG(a,b,0x3ff)                               // 10bit mask
00058 
00059 //
00060 // IEEE single float value tolerance equal or greater than 1.0 macro ( i.e. 1.0 <= )
00061 //
00062 #define F_EQG1_6(a)  FLOAT_EQGINT(0x3f800000,*(unsigned int *)&a,0x3f)  //  6bit mask
00063 #define F_EQG1_7(a)  FLOAT_EQGINT(0x3f800000,*(unsigned int *)&a,0x7f)  //  7bit mask
00064 #define F_EQG1_8(a)  FLOAT_EQGINT(0x3f800000,*(unsigned int *)&a,0xff)  //  8bit mask
00065 #define F_EQG1_9(a)  FLOAT_EQGINT(0x3f800000,*(unsigned int *)&a,0x1ff) //  9bit mask
00066 #define F_EQG1_10(a) FLOAT_EQGINT(0x3f800000,*(unsigned int *)&a,0x3ff) // 10bit mask
00067 
00068 #endif

Generated at Sat Aug 5 00:26:50 2000 for Radiator by doxygen 1.1.0 written by Dimitri van Heesch, © 1997-2000