00001 #include "SdlArs.h" 00002 //#define WANT_STREAM 00003 #include "include.h" 00004 #include "extreal.h" 00005 00006 #ifdef use_namespace 00007 namespace NEWRAN { 00008 #endif 00009 00010 ExtReal ExtReal::operator+(const ExtReal& er) const 00011 { 00012 if (c==Finite && er.c==Finite) return ExtReal(value+er.value); 00013 if (c==Missing || er.c==Missing) return ExtReal(Missing); 00014 if (c==Indefinite || er.c==Indefinite) return ExtReal(Indefinite); 00015 if (c==PlusInfinity) 00016 { 00017 if (er.c==MinusInfinity) return ExtReal(Indefinite); 00018 return *this; 00019 } 00020 if (c==MinusInfinity) 00021 { 00022 if (er.c==PlusInfinity) return ExtReal(Indefinite); 00023 return *this; 00024 } 00025 return er; 00026 } 00027 00028 ExtReal ExtReal::operator-(const ExtReal& er) const 00029 { 00030 if (c==Finite && er.c==Finite) return ExtReal(value-er.value); 00031 if (c==Missing || er.c==Missing) return ExtReal(Missing); 00032 if (c==Indefinite || er.c==Indefinite) return ExtReal(Indefinite); 00033 if (c==PlusInfinity) 00034 { 00035 if (er.c==PlusInfinity) return ExtReal(Indefinite); 00036 return *this; 00037 } 00038 if (c==MinusInfinity) 00039 { 00040 if (er.c==MinusInfinity) return ExtReal(Indefinite); 00041 return *this; 00042 } 00043 return er; 00044 } 00045 00046 ExtReal ExtReal::operator*(const ExtReal& er) const 00047 { 00048 if (c==Finite && er.c==Finite) return ExtReal(value*er.value); 00049 if (c==Missing || er.c==Missing) return ExtReal(Missing); 00050 if (c==Indefinite || er.c==Indefinite) return ExtReal(Indefinite); 00051 if (c==Finite) 00052 { 00053 if (value==0.0) return ExtReal(Indefinite); 00054 if (value>0.0) return er; 00055 return (-er); 00056 } 00057 if (er.c==Finite) 00058 { 00059 if (er.value==0.0) return ExtReal(Indefinite); 00060 if (er.value>0.0) return *this; 00061 return -(*this); 00062 } 00063 if (c==PlusInfinity) return er; 00064 return (-er); 00065 } 00066 00067 ExtReal ExtReal::operator-() const 00068 { 00069 switch (c) 00070 { 00071 case Finite: return ExtReal(-value); 00072 case PlusInfinity: return ExtReal(MinusInfinity); 00073 case MinusInfinity: return ExtReal(PlusInfinity); 00074 case Indefinite: return ExtReal(Indefinite); 00075 case Missing: return ExtReal(Missing); 00076 } 00077 return 0.0; 00078 } 00079 00080 /* 00081 ostream& operator<<(ostream& os, const ExtReal& er) 00082 { 00083 switch (er.c) 00084 { 00085 case Finite: os << er.value; break; 00086 case PlusInfinity: os << string( "plus-infinity" ); break; 00087 case MinusInfinity: os << string( "minus-infinity" ); break; 00088 case Indefinite: os << string( "indefinite" ); break; 00089 case Missing: os << string( "missing" ); break; 00090 } 00091 return os; 00092 } 00093 */ 00094 #ifdef use_namespace 00095 } 00096 #endif 00097