00001 // gmath.cpp -- Version 0.0 00002 00003 #include "gmath.h" 00004 #include <math.h> 00005 #include "gcalendar.h" 00006 //////////////////////////////////////////////////////////// 00007 gIntDegree::gIntDegree (int d) 00008 : gInt( d ), 00009 rValue( 0 ) 00010 { 00011 } 00012 00013 gIntDegree::~gIntDegree () 00014 { 00015 } 00016 00017 int gIntDegree::NearestInt (float aValue) 00018 { 00019 float absValue = aValue; 00020 if ( aValue<0 ) absValue = -aValue; 00021 int iVal = (int)absValue, oVal = iVal; 00022 oVal += (absValue - (float)iVal > 0.5); 00023 return aValue>=0 ? oVal : -oVal; 00024 } 00025 00026 gIntDegree::gIntDegree (gIntDegree& copy) 00027 { 00028 SetInt( copy.GetInt() ); 00029 } 00030 00031 gIntDegree& gIntDegree::operator= (gIntDegree& copy) 00032 { 00033 SetInt( copy.GetInt() ); 00034 return *this; 00035 } 00036 //////////////////////////////////////////////////////////// 00037 gDegreeCelsius::gDegreeCelsius (int d) 00038 : gIntDegree( d ) 00039 { 00040 } 00041 00042 gDegreeCelsius::~gDegreeCelsius () 00043 { 00044 } 00045 00046 int gDegreeCelsius::ConvertToFahrenheit (int d) 00047 { 00048 // F to Celsius: 00049 // (5/9)*(DegreeF-32) 00050 00051 // Celsius to F 00052 // (1.8*deg C)+32 00053 00054 rValue = 1.8 * (float)d + 32.0; 00055 return NearestInt( rValue ); 00056 } 00057 //////////////////////////////////////////////////////////// 00058 gDegreeFh::gDegreeFh (int d) 00059 : gIntDegree( d ) 00060 { 00061 } 00062 00063 gDegreeFh::~gDegreeFh () 00064 { 00065 } 00066 00067 int gDegreeFh::ConvertToCelsius (int d) 00068 { 00069 // F to Celsius: 00070 // (5/9)*(DegreeF-32) 00071 rValue = (float)(d-32) * 5.0 / 9.0; 00072 return NearestInt( rValue ); 00073 } 00074 //////////////////////////////////////////////////////////// 00075 gRandom::gRandom (unsigned uVal) 00076 : gInt( 0 ), 00077 uRange( uVal ) 00078 { 00079 SetInt( (int)thisGetRandom( uRange ) ); 00080 } 00081 00082 gRandom::~gRandom () 00083 { 00084 } 00085 00086 void gRandom::Reset () 00087 { 00088 SetInt( (int)thisGetRandom( uRange ) ); 00089 } 00090 00091 void gRandom::SetSeed (unsigned uVal) 00092 { 00093 srand( uVal ); 00094 } 00095 00096 void gRandom::GarbleSeed (unsigned uVal) 00097 { 00098 gDateTime aDtTm( gDateTime::e_Now ); 00099 uVal += (unsigned)aDtTm.GetTimeStamp(); 00100 SetSeed( uVal ); 00101 } 00102 00103 unsigned gRandom::thisGetRandom (unsigned uVal) 00104 { 00105 unsigned uRand; 00106 if ( uVal==0 ) return 0; 00107 uRand = rand() % uVal; 00108 return uRand; 00109 } 00110 //////////////////////////////////////////////////////////// 00111