00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "cidot.hpp"
00027 #include "ioflags.hpp"
00028
00029 namespace cxsc {
00030
00031
00032
00033
00034
00035 std::ostream & operator << (std::ostream &s, const cidotprecision& a) throw()
00036 {
00037 s << '(' << SaveOpt
00038 << '[' << RndDown << a.reinf << ',' << RndUp << a.resup << ']' << ','
00039 << '[' << RndDown << a.iminf << ',' << RndUp << a.imsup << ']'
00040 << ')' << RestoreOpt;
00041
00042 return s;
00043 }
00044 std::string & operator << (std::string &s, const cidotprecision &a) throw()
00045 {
00046 s+="([";
00047 s << SaveOpt << RndDown << a.reinf;
00048 s+=',';
00049 s << RndUp << a.resup;
00050 s+="],[";
00051 s << RndDown << a.iminf;
00052 s+=',';
00053 s << RndUp << a.imsup << RestoreOpt;
00054 s+="])";
00055 return s;
00056 }
00057
00058 std::istream & operator >> (std::istream &s, cidotprecision &a) throw(ERROR_CIDOTPRECISION_EMPTY_INTERVAL)
00059 {
00060 char c;
00061
00062 skipwhitespacesandputback (s, '(');
00063 skipwhitespacesandputback (s, '[');
00064 s >> SaveOpt >> RndDown >> a.reinf;
00065 skipwhitespacesandputback (s, ',');
00066 s >> RndUp >>a.resup;
00067 skipwhitespacesandputback (s, ']');
00068 skipwhitespacesandputback (s, ',');
00069 skipwhitespacesandputback (s, '[');
00070 s >> RndDown >> a.iminf;
00071 skipwhitespacesandputback (s, ',');
00072 s >> RndUp >> a.imsup >> RestoreOpt;
00073
00074 if (!waseolnflag)
00075 {
00076 skipeolnflag = false, inpdotflag = true;
00077 c = skipwhitespaces (s);
00078 if (inpdotflag && c != ']')
00079 s.putback(c);
00080 }
00081 if (!waseolnflag)
00082 {
00083 skipeolnflag = false, inpdotflag = true;
00084 c = skipwhitespaces (s);
00085 if (inpdotflag && c != ')')
00086 s.putback(c);
00087 }
00088
00089 if (a.reinf > a.resup || a.iminf > a.imsup)
00090 cxscthrow(ERROR_CIDOTPRECISION_EMPTY_INTERVAL("std::istream & operator >> (std::istream &s, cidotprecision &a)"));
00091
00092 return s;
00093 }
00094
00095 std::string & operator >> (std::string &s, cidotprecision &a) throw(ERROR_CIDOTPRECISION_EMPTY_INTERVAL)
00096 {
00097 s = skipwhitespacessinglechar (s, '(');
00098 s = skipwhitespacessinglechar (s, '[');
00099 s = s >> SaveOpt >> RndDown >> a.reinf;
00100 s = skipwhitespacessinglechar (s, ',');
00101 s = s >> RndUp >> a.resup;
00102 s = skipwhitespacessinglechar (s, ']');
00103 s = skipwhitespacessinglechar (s, ',');
00104 s = skipwhitespacessinglechar (s, '[');
00105 s = s >> RndDown >> a.iminf;
00106 s = skipwhitespacessinglechar (s, ',');
00107 s = s >> RndUp >> a.iminf >> RestoreOpt;
00108 s = skipwhitespaces (s);
00109 if (s[0] == ']')
00110 s.erase(0,1);
00111 s = skipwhitespaces (s);
00112 if (s[0] == ')')
00113 s.erase(0,1);
00114
00115 if (a.reinf > a.resup || a.iminf > a.imsup)
00116 cxscthrow(ERROR_CIDOTPRECISION_EMPTY_INTERVAL("std::string & operator >> (std::string &s, cidotprecision &a)"));
00117
00118 return s;
00119 }
00120
00121 void operator >>(const std::string &s,cidotprecision &a) throw(ERROR_CIDOTPRECISION_EMPTY_INTERVAL)
00122 {
00123 std::string r(s);
00124 r>>a;
00125 }
00126 void operator >>(const char *s,cidotprecision &a) throw(ERROR_CIDOTPRECISION_EMPTY_INTERVAL)
00127 {
00128 std::string r(s);
00129 r>>a;
00130 }
00131
00132
00133 void accumulate(cidotprecision & a,const cinterval & b,const cinterval & c) throw()
00134 {
00135 z_padd(
00136 a.reinf.ptr(),a.iminf.ptr(),
00137 a.resup.ptr(),a.imsup.ptr(),
00138 *(a_cinv*)&b,*(a_cinv*)&c);
00139 }
00140
00141 }
00142