<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>wrapper_scs.h Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.2.15 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> </center> <hr><h1>wrapper_scs.h</h1><div class="fragment"><pre>00001 <font class="keyword">extern</font> <font class="stringliteral">"C"</font> 00002 { 00003 <font class="preprocessor">#include "<a class="code" href="scs_8h.html">scs.h</a>"</font> 00004 } 00005 <font class="preprocessor">#include <stdlib.h></font> 00006 <font class="preprocessor">#include <stdio.h></font> 00007 <font class="preprocessor">#include <math.h></font> 00008 <font class="preprocessor">#include <iostream.h></font> 00009 00010 <font class="preprocessor">#ifndef SCS_WRAPPER_CPP</font> 00011 <font class="preprocessor"></font><font class="preprocessor">#define SCS_WRAPPER_CPP 1</font> 00012 <font class="preprocessor"></font> 00013 <font class="keyword">extern</font> <font class="stringliteral">"C"</font> <font class="keywordtype">int</font> scs_cmp_mant(<a class="code" href="structscs.html">scs_ptr</a> , <a class="code" href="structscs.html">scs_ptr</a>); 00014 00015 <font class="keyword">class </font>Scs{ 00016 <font class="keyword">private</font>: 00017 <a class="code" href="structscs.html">scs</a> scsnb; 00018 00019 <font class="keyword">public</font>: 00020 <font class="comment">/* Constructors */</font> 00021 Scs(){} 00022 Scs(<font class="keywordtype">double</font> &d){<a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&scsnb, d);} 00023 Scs(<font class="keywordtype">int</font> &i){<a class="code" href="double2scs_8c.html#a1">scs_set_si</a>(&scsnb, i);} 00024 Scs(<font class="keyword">const</font> Scs& nb); 00025 ~Scs(){}; 00026 00027 <font class="comment">/* Mutators */</font> 00028 <font class="keywordtype">void</font> scs_set_sign (<font class="keywordtype">int</font> i) {this->scsnb.<a class="code" href="structscs.html#m3">sign</a> = i;} 00029 <font class="keywordtype">void</font> scs_set_index(<font class="keywordtype">int</font> i) {this->scsnb.<a class="code" href="structscs.html#m2">index</a> = i;} 00030 <font class="keywordtype">void</font> scs_set_excep(<font class="keywordtype">double</font> d) {this->scsnb.<a class="code" href="structscs.html#m1">exception</a>.d = d;} 00031 <font class="keywordtype">void</font> scs_set_words(<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> word[SCS_NB_WORDS]){<font class="keywordflow">for</font>(<font class="keywordtype">int</font> i=0; i<SCS_NB_WORDS; i++) this->scsnb.<a class="code" href="structscs.html#m0">h_word</a>[i] = word[i];} 00032 00033 <font class="comment">/* Cast */</font> 00034 operator double(); 00035 operator int(); 00036 00037 00038 <font class="comment">/* Negation */</font> 00039 Scs operator-() <font class="keyword">const</font>; 00040 <font class="keyword">friend</font> Scs fabs(<font class="keyword">const</font> Scs &a); 00041 00042 <font class="comment">/* Assignment */</font> 00043 Scs &operator=(<font class="keyword">const</font> Scs &nb1); 00044 Scs &operator=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb1); 00045 Scs &operator=(<font class="keyword">const</font> <font class="keywordtype">int</font> i){<a class="code" href="double2scs_8c.html#a1">scs_set_si</a>(&scsnb, i);} 00046 00047 <font class="comment">/* Addition */</font> 00048 <font class="keyword">friend</font> Scs operator+(Scs &nb1,Scs &nb2); 00049 <font class="keyword">friend</font> Scs operator+(Scs &nb1, <font class="keyword">const</font> <font class="keywordtype">double</font> &nb2); 00050 <font class="keyword">friend</font> Scs operator+(<font class="keyword">const</font> <font class="keywordtype">double</font> &nb1,Scs &nb2); 00051 <font class="keywordtype">void</font> operator+=(Scs &nb); 00052 <font class="keywordtype">void</font> operator+=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb); 00053 00054 <font class="comment">/* Subtraction */</font> 00055 <font class="keyword">friend</font> Scs operator-(Scs &nb1,Scs &nb2); 00056 <font class="keyword">friend</font> Scs operator-(Scs &nb1, <font class="keyword">const</font> <font class="keywordtype">double</font> &nb2); 00057 <font class="keyword">friend</font> Scs operator-(<font class="keyword">const</font> <font class="keywordtype">double</font> &nb1,Scs &nb2); 00058 <font class="keywordtype">void</font> operator-=(Scs &nb); 00059 <font class="keywordtype">void</font> operator-=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb); 00060 00061 <font class="comment">/* Multiplication */</font> 00062 <font class="keyword">friend</font> Scs operator*(Scs &nb1,Scs &nb2); 00063 <font class="keyword">friend</font> Scs operator*(Scs &nb1, <font class="keyword">const</font> <font class="keywordtype">double</font> &nb2); 00064 <font class="keyword">friend</font> Scs operator*(<font class="keyword">const</font> <font class="keywordtype">double</font> &nb1,Scs &nb2); 00065 <font class="keyword">friend</font> Scs operator*(Scs &nb1, <font class="keyword">const</font> <font class="keywordtype">int</font> &nb2); 00066 <font class="keyword">friend</font> Scs operator*(<font class="keyword">const</font> <font class="keywordtype">int</font> &nb1,Scs &nb2); 00067 <font class="keywordtype">void</font> operator*=(Scs &nb); 00068 <font class="keywordtype">void</font> operator*=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb); 00069 <font class="keywordtype">void</font> operator*=(<font class="keyword">const</font> <font class="keywordtype">int</font> nb); 00070 00071 <font class="comment">/* Multiplication */</font> 00072 <font class="keyword">friend</font> Scs operator/(Scs &nb1,Scs &nb2); 00073 <font class="keyword">friend</font> Scs operator/(Scs &nb1, <font class="keyword">const</font> <font class="keywordtype">double</font> &nb2); 00074 <font class="keyword">friend</font> Scs operator/(<font class="keyword">const</font> <font class="keywordtype">double</font> &nb1,Scs &nb2); 00075 <font class="keywordtype">void</font> operator/=(Scs &nb); 00076 <font class="keywordtype">void</font> operator/=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb); 00077 00078 <font class="comment">/* Comparisons */</font> 00079 <font class="keyword">friend</font> <font class="keywordtype">bool</font> operator==(Scs &nb1,Scs &nb2); 00080 <font class="keyword">friend</font> <font class="keywordtype">bool</font> operator!=(Scs &nb1,Scs &nb2); 00081 <font class="keyword">friend</font> <font class="keywordtype">bool</font> operator<=(Scs &nb1,Scs &nb2); 00082 <font class="keyword">friend</font> <font class="keywordtype">bool</font> operator>=(Scs &nb1,Scs &nb2); 00083 <font class="keyword">friend</font> <font class="keywordtype">bool</font> operator<(Scs &nb1,Scs &nb2); 00084 <font class="keyword">friend</font> <font class="keywordtype">bool</font> operator>(Scs &nb1,Scs &nb2); 00085 00086 <font class="comment">/* Random Number */</font> 00087 Scs rand(<font class="keywordtype">void</font>); 00088 00089 <font class="comment">/* Input/Output */</font> 00090 <font class="keyword">friend</font> ostream& operator<<(ostream &s, <font class="keyword">const</font> Scs &a); 00091 <font class="keyword">friend</font> istream& operator>>(istream &s, Scs &a); 00092 00093 }; 00094 00095 00096 00097 00098 <font class="comment">/**************</font> 00099 <font class="comment"> * CONSTRUCTOR</font> 00100 <font class="comment"> **************/</font> 00101 Scs::Scs(<font class="keyword">const</font> Scs& nb){ 00102 <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> i; 00103 00104 <font class="keywordflow">for</font>(i=0; i<SCS_NB_WORDS; i++) 00105 this->scsnb.h_word[i] = nb.scsnb.h_word[i]; 00106 00107 this->scsnb.exception.d = nb.scsnb.exception.d; 00108 this->scsnb.index = nb.scsnb.index; 00109 this->scsnb.sign = nb.scsnb.sign; 00110 } 00111 00112 <font class="comment">/**************</font> 00113 <font class="comment"> * CAST</font> 00114 <font class="comment"> **************/</font> 00115 <font class="keyword">inline</font> Scs::operator double() { 00116 <font class="keywordtype">double</font> d; 00117 <a class="code" href="scs2double_8c.html#a0">scs_get_d</a>(&d, &(this->scsnb)); 00118 <font class="keywordflow">return</font> d; 00119 } 00120 <font class="keyword">inline</font> Scs::operator int() { 00121 <font class="keywordtype">double</font> d; 00122 <a class="code" href="scs2double_8c.html#a0">scs_get_d</a>(&d, &(this->scsnb)); 00123 <font class="keywordflow">return</font> ((int)d); 00124 } 00125 00126 00127 00128 <font class="comment">/************** </font> 00129 <font class="comment"> * ASSIGNATION</font> 00130 <font class="comment"> **************/</font> 00131 <font class="keyword">inline</font> Scs &Scs::operator=(<font class="keyword">const</font> Scs& nb){ 00132 <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> i; 00133 00134 <font class="keywordflow">for</font>(i=0; i<SCS_NB_WORDS; i++) 00135 scsnb.h_word[i] = nb.scsnb.h_word[i]; 00136 00137 scsnb.exception.d = nb.scsnb.exception.d; 00138 scsnb.index = nb.scsnb.index; 00139 scsnb.sign = nb.scsnb.sign; 00140 00141 <font class="keywordflow">return</font> *<font class="keyword">this</font>; 00142 } 00143 <font class="keyword">inline</font> Scs &Scs::operator=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb){ 00144 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(this->scsnb), nb); 00145 <font class="keywordflow">return</font> *<font class="keyword">this</font>; 00146 } 00147 <font class="keyword">inline</font> Scs fabs(<font class="keyword">const</font> Scs &a){ 00148 Scs res(a); 00149 res.scsnb.sign = 1; 00150 <font class="keywordflow">return</font> res; 00151 } 00152 00153 00154 <font class="comment">/************</font> 00155 <font class="comment"> * ADDITION</font> 00156 <font class="comment"> ************/</font> 00157 <font class="keyword">inline</font> Scs operator+(Scs &nb1,Scs &nb2){ 00158 Scs res; <a class="code" href="addition__scs_8c.html#a8">scs_add</a>(&(res.scsnb), &(nb1.scsnb), &(nb2.scsnb)); 00159 <font class="keywordflow">return</font> res; 00160 } 00161 <font class="keyword">inline</font> Scs operator+(Scs &nb1,<font class="keyword">const</font> <font class="keywordtype">double</font> &nb2){ 00162 Scs res, op; 00163 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(op.scsnb), nb2); 00164 <a class="code" href="addition__scs_8c.html#a8">scs_add</a>(&(res.scsnb), &(nb1.scsnb), &(op.scsnb)); 00165 <font class="keywordflow">return</font> res; 00166 } 00167 <font class="keyword">inline</font> Scs operator+(<font class="keyword">const</font> <font class="keywordtype">double</font> &nb1, Scs &nb2){ 00168 Scs res, op; 00169 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(op.scsnb), nb1); 00170 <a class="code" href="addition__scs_8c.html#a8">scs_add</a>(&(res.scsnb), &(nb2.scsnb), &(op.scsnb)); 00171 <font class="keywordflow">return</font> res; 00172 } 00173 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator+=(Scs &nb) { 00174 <a class="code" href="addition__scs_8c.html#a8">scs_add</a>(&(this->scsnb), &(this->scsnb), &(nb.scsnb)); 00175 } 00176 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator+=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb) { 00177 Scs op; 00178 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(op.scsnb), nb); 00179 <a class="code" href="addition__scs_8c.html#a8">scs_add</a>(&(this->scsnb), &(this->scsnb), &(op.scsnb)); 00180 } 00181 00182 00183 00184 00185 <font class="comment">/**************</font> 00186 <font class="comment"> * SUBTRACTION</font> 00187 <font class="comment"> **************/</font> 00188 <font class="keyword">inline</font> Scs operator-(Scs &nb1,Scs &nb2){ 00189 Scs res; <a class="code" href="addition__scs_8c.html#a9">scs_sub</a>(&(res.scsnb), &(nb1.scsnb), &(nb2.scsnb)); 00190 <font class="keywordflow">return</font> res; 00191 } 00192 <font class="keyword">inline</font> Scs operator-(Scs &nb1,<font class="keyword">const</font> <font class="keywordtype">double</font> &nb2){ 00193 Scs res, op; 00194 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(op.scsnb), nb2); 00195 <a class="code" href="addition__scs_8c.html#a9">scs_sub</a>(&(res.scsnb), &(nb1.scsnb), &(op.scsnb)); 00196 <font class="keywordflow">return</font> res; 00197 } 00198 <font class="keyword">inline</font> Scs operator-(<font class="keyword">const</font> <font class="keywordtype">double</font> &nb1, Scs &nb2){ 00199 Scs res, op; 00200 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(op.scsnb), nb1); 00201 <a class="code" href="addition__scs_8c.html#a9">scs_sub</a>(&(res.scsnb), &(nb2.scsnb), &(op.scsnb)); 00202 <font class="keywordflow">return</font> res; 00203 } 00204 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator-=(Scs &nb) { 00205 <a class="code" href="addition__scs_8c.html#a9">scs_sub</a>(&(this->scsnb), &(this->scsnb), &(nb.scsnb)); 00206 } 00207 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator-=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb) { 00208 Scs op; 00209 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(op.scsnb), nb); 00210 <a class="code" href="addition__scs_8c.html#a9">scs_sub</a>(&(this->scsnb), &(this->scsnb), &(op.scsnb)); 00211 } 00212 00213 00214 00215 <font class="comment">/*****************</font> 00216 <font class="comment"> * MULTIPLICATION</font> 00217 <font class="comment"> *****************/</font> 00218 <font class="keyword">inline</font> Scs operator*(Scs &nb1,Scs &nb2){ 00219 Scs res; <a class="code" href="multiplication__scs_8c.html#a2">scs_mul</a>(&(res.scsnb), &(nb1.scsnb), &(nb2.scsnb)); 00220 <font class="keywordflow">return</font> res; 00221 } 00222 <font class="keyword">inline</font> Scs operator*(Scs &nb1,<font class="keyword">const</font> <font class="keywordtype">double</font> &nb2){ 00223 Scs res, op; 00224 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(op.scsnb), nb2); 00225 <a class="code" href="multiplication__scs_8c.html#a2">scs_mul</a>(&(res.scsnb), &(nb1.scsnb), &(op.scsnb)); 00226 <font class="keywordflow">return</font> res; 00227 } 00228 <font class="keyword">inline</font> Scs operator*(<font class="keyword">const</font> <font class="keywordtype">double</font> &nb1, Scs &nb2){ 00229 Scs res, op; 00230 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(op.scsnb), nb1); 00231 <a class="code" href="multiplication__scs_8c.html#a2">scs_mul</a>(&(res.scsnb), &(nb2.scsnb), &(op.scsnb)); 00232 <font class="keywordflow">return</font> res; 00233 } 00234 <font class="keyword">inline</font> Scs operator*(Scs &nb1, <font class="keyword">const</font> <font class="keywordtype">int</font> &nb2){ 00235 Scs res; 00236 <a class="code" href="addition__scs_8c.html#a0">scs_set</a>(&(res.scsnb), &(nb1.scsnb)); 00237 <a class="code" href="multiplication__scs_8c.html#a4">scs_mul_ui</a>(&(res.scsnb), nb2); 00238 <font class="keywordflow">return</font> res; 00239 } 00240 <font class="keyword">inline</font> Scs operator*(<font class="keyword">const</font> <font class="keywordtype">int</font> &nb1, Scs &nb2){ 00241 Scs res; 00242 <a class="code" href="addition__scs_8c.html#a0">scs_set</a>(&(res.scsnb), &(nb2.scsnb)); 00243 <a class="code" href="multiplication__scs_8c.html#a4">scs_mul_ui</a>(&(res.scsnb), nb1); 00244 <font class="keywordflow">return</font> res; 00245 } 00246 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator*=(Scs &nb) { 00247 <a class="code" href="multiplication__scs_8c.html#a2">scs_mul</a>(&(this->scsnb), &(this->scsnb), &(nb.scsnb)); 00248 } 00249 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator*=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb) { 00250 Scs op; 00251 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(op.scsnb), nb); 00252 <a class="code" href="multiplication__scs_8c.html#a2">scs_mul</a>(&(this->scsnb), &(this->scsnb), &(op.scsnb)); 00253 } 00254 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator*=(<font class="keyword">const</font> <font class="keywordtype">int</font> nb) { 00255 <a class="code" href="multiplication__scs_8c.html#a4">scs_mul_ui</a>(&(this->scsnb), nb); 00256 } 00257 00258 00259 00260 <font class="comment">/*****************</font> 00261 <font class="comment"> * DIVISION</font> 00262 <font class="comment"> *****************/</font> 00263 <font class="keyword">inline</font> Scs operator/(Scs &nb1,Scs &nb2){ 00264 Scs res; <a class="code" href="division__scs_8c.html#a1">scs_div</a>(&(res.scsnb), &(nb1.scsnb), &(nb2.scsnb)); 00265 <font class="keywordflow">return</font> res; 00266 } 00267 <font class="keyword">inline</font> Scs operator/(Scs &nb1, <font class="keyword">const</font> <font class="keywordtype">double</font> &nb2){ 00268 Scs res, op; 00269 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(op.scsnb), nb2); 00270 <a class="code" href="division__scs_8c.html#a1">scs_div</a>(&(res.scsnb), &(nb1.scsnb), &(op.scsnb)); 00271 <font class="keywordflow">return</font> res; 00272 } 00273 <font class="keyword">inline</font> Scs operator/(<font class="keyword">const</font> <font class="keywordtype">double</font> &nb1, Scs &nb2){ 00274 Scs res, op; 00275 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(op.scsnb), nb1); 00276 <a class="code" href="division__scs_8c.html#a1">scs_div</a>(&(res.scsnb), &(nb2.scsnb), &(op.scsnb)); 00277 <font class="keywordflow">return</font> res; 00278 } 00279 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator/=(Scs &nb) { 00280 <a class="code" href="division__scs_8c.html#a1">scs_div</a>(&(this->scsnb), &(this->scsnb), &(nb.scsnb)); 00281 } 00282 <font class="keywordtype">void</font> <font class="keyword">inline</font> Scs::operator/=(<font class="keyword">const</font> <font class="keywordtype">double</font> nb) { 00283 Scs op; 00284 <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(&(op.scsnb), nb); 00285 <a class="code" href="division__scs_8c.html#a1">scs_div</a>(&(this->scsnb), &(this->scsnb), &(op.scsnb)); 00286 } 00287 00288 00289 00290 <font class="comment">/*************</font> 00291 <font class="comment"> * COMPARISON</font> 00292 <font class="comment"> *************/</font> 00293 <font class="keyword">inline</font> <font class="keywordtype">bool</font> operator==(Scs &nb1, Scs &nb2){ 00294 <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> i; 00295 <font class="keywordtype">bool</font> b=1; 00296 00297 <font class="keywordflow">for</font>(i=0; i<SCS_NB_WORDS; i++) 00298 <font class="keywordflow">if</font> (nb1.scsnb.h_word[i] == nb2.scsnb.h_word[i]) b=0; 00299 00300 <font class="keywordflow">return</font> ((nb1.scsnb.exception.d == nb2.scsnb.exception.d)&& 00301 (nb1.scsnb.index == nb2.scsnb.index)&& 00302 (nb1.scsnb.sign == nb2.scsnb.sign)&& b); 00303 } 00304 <font class="keyword">inline</font> <font class="keywordtype">bool</font> operator!=(Scs &nb1, Scs &nb2){ 00305 <font class="keywordflow">return</font> !(nb1==nb2); 00306 } 00307 <font class="keyword">inline</font> <font class="keywordtype">bool</font> operator<=(Scs &nb1, Scs &nb2){ 00308 <font class="keywordflow">return</font> ((nb1.scsnb.exception.d <= nb2.scsnb.exception.d)&& 00309 (nb1.scsnb.sign <= nb2.scsnb.sign)&& 00310 ((nb1.scsnb.index < nb2.scsnb.index)|| 00311 ((nb1.scsnb.index == nb2.scsnb.index)&& 00312 (scs_cmp_mant(&(nb1.scsnb), &(nb2.scsnb))<=0)))); 00313 } 00314 <font class="keyword">inline</font> <font class="keywordtype">bool</font> operator>=(Scs &nb1, Scs &nb2){ 00315 <font class="keywordflow">return</font> ((nb1.scsnb.exception.d >= nb2.scsnb.exception.d)&& 00316 (nb1.scsnb.sign >= nb2.scsnb.sign)&& 00317 ((nb1.scsnb.index > nb2.scsnb.index)|| 00318 ((nb1.scsnb.index == nb2.scsnb.index)&& 00319 (scs_cmp_mant(&(nb1.scsnb), &(nb2.scsnb))>=0)))); 00320 } 00321 <font class="keyword">inline</font> <font class="keywordtype">bool</font> operator<(Scs &nb1, Scs &nb2){ 00322 <font class="keywordflow">return</font> ((nb1.scsnb.exception.d <= nb2.scsnb.exception.d)&& 00323 (nb1.scsnb.sign <= nb2.scsnb.sign)&& 00324 ((nb1.scsnb.index < nb2.scsnb.index)|| 00325 ((nb1.scsnb.index == nb2.scsnb.index)&& 00326 (scs_cmp_mant(&(nb1.scsnb), &(nb2.scsnb))<0)))); 00327 } 00328 <font class="keyword">inline</font> <font class="keywordtype">bool</font> operator>(Scs &nb1, Scs &nb2){ 00329 <font class="keywordflow">return</font> ((nb1.scsnb.exception.d >= nb2.scsnb.exception.d)&& 00330 (nb1.scsnb.sign >= nb2.scsnb.sign)&& 00331 ((nb1.scsnb.index > nb2.scsnb.index)|| 00332 ((nb1.scsnb.index == nb2.scsnb.index)&& 00333 (scs_cmp_mant(&(nb1.scsnb), &(nb2.scsnb))>0)))); 00334 } 00335 00336 00337 00338 00339 <font class="comment">/****************</font> 00340 <font class="comment"> * RANDOM NUMBER</font> 00341 <font class="comment"> ****************/</font> 00342 <font class="keyword">inline</font> Scs Scs::rand(<font class="keywordtype">void</font>){ 00343 scs_rand(&(this->scsnb), 200); 00344 <font class="keywordflow">return</font> *<font class="keyword">this</font>; 00345 } 00346 00347 00348 00349 00350 <font class="comment">/*************** </font> 00351 <font class="comment"> * OUTPUT (in hexadecimal)</font> 00352 <font class="comment"> ***************/</font> 00353 ostream &operator<<(ostream &os, <font class="keyword">const</font> Scs &a){ 00354 Scs aa, p, zer; 00355 <font class="keywordtype">double</font> d; 00356 <font class="keywordtype">char</font> buffer[10]; 00357 <font class="keywordtype">int</font> e, exposant; 00358 <font class="keywordtype">bool</font> bb; 00359 00360 <font class="keywordflow">if</font> (a.scsnb.exception.d != 1.){ 00361 os << (double)a.scsnb.exception.d; 00362 }<font class="keywordflow">else</font> { 00363 <font class="keywordflow">if</font> (a.scsnb.sign == -1) 00364 os << <font class="charliteral">'-'</font>; 00365 00366 aa = fabs(a); 00367 00368 <font class="comment">/* Compute the exposant in radix 16 */</font> 00369 d = ((a.scsnb.index)*SCS_NB_BITS)/4; 00370 e = 4*(int)floor(d); 00371 00372 p = 1; 00373 p.scsnb.index = (int)floor(((<font class="keywordtype">double</font>)e)/SCS_NB_BITS); 00374 p.scsnb.h_word[0] = 1 << e - p.scsnb.index*SCS_NB_BITS; 00375 exposant = (int)floor(d); 00376 p /= 16; 00377 exposant--; 00378 <font class="keywordflow">while</font>(p <= aa){ 00379 p *= 16; 00380 exposant++; 00381 } 00382 p /= 16; 00383 exposant--; 00384 00385 <font class="comment">/* Extract digits */</font> 00386 aa = aa / p; 00387 sprintf(buffer,<font class="stringliteral">"%x"</font>, aa.scsnb.h_word[0]); 00388 os << buffer << <font class="stringliteral">"."</font>; 00389 aa.scsnb.h_word[0] = 0; 00390 aa *= 16; 00391 00392 bb = 1; 00393 <font class="keywordflow">while</font>(bb){ 00394 sprintf(buffer,<font class="stringliteral">"%x"</font>, aa.scsnb.h_word[0]); 00395 os << buffer; 00396 aa.scsnb.h_word[0] = 0; 00397 aa *= 16; 00398 00399 bb = 0; 00400 <font class="keywordflow">for</font>(<font class="keywordtype">int</font> i=0; i<SCS_NB_WORDS; i++) 00401 <font class="keywordflow">if</font> (aa.scsnb.h_word[i] != 0) bb=1; 00402 } 00403 00404 <font class="comment">/* Write the exponent */</font> 00405 os << <font class="stringliteral">" x16^("</font> << exposant <<<font class="stringliteral">")"</font>; 00406 } 00407 00408 <font class="keywordflow">return</font> os; 00409 } 00410 00411 00412 <font class="comment">/*************** </font> 00413 <font class="comment"> * INPUT (in decimal)</font> 00414 <font class="comment"> ***************/</font> 00415 istream& operator>>(istream &is, Scs &a){ 00416 <font class="keywordtype">char</font> c; 00417 <font class="keywordtype">int</font> nd = 0; 00418 <font class="keywordtype">int</font> point = -1; 00419 <font class="keywordtype">int</font> ex; 00420 <font class="keywordtype">bool</font> done = <font class="keyword">false</font>; 00421 Scs r; 00422 00423 r = 0; 00424 00425 <font class="comment">/* Skip any leading spaces */</font> 00426 <font class="keywordflow">do</font>{ 00427 is>>c; 00428 }<font class="keywordflow">while</font> (c == <font class="charliteral">' '</font>); 00429 00430 <font class="comment">/* Read sign, digits, and exponent */</font> 00431 <font class="keywordflow">while</font> (!done && (c != <font class="charliteral">'\0'</font>)) { 00432 <font class="keywordflow">if</font> (c >= <font class="charliteral">'0'</font> && c <= <font class="charliteral">'9'</font>) { 00433 <font class="keywordtype">int</font> d = c - <font class="charliteral">'0'</font>; 00434 r *= 10.0; 00435 r += d; 00436 nd++; 00437 } <font class="keywordflow">else</font> { 00438 <font class="keywordflow">switch</font> (c) { 00439 <font class="keywordflow">case</font> <font class="charliteral">'.'</font>: 00440 point = nd; 00441 <font class="keywordflow">break</font>; 00442 <font class="keywordflow">case</font> <font class="charliteral">'-'</font>: 00443 <font class="keywordflow">case</font> <font class="charliteral">'+'</font>: 00444 <font class="keywordflow">if</font> (nd > 0){ 00445 a = 0; 00446 done = <font class="keyword">true</font>; 00447 point = -1; 00448 ex = 0; 00449 } 00450 a.scsnb.sign = (c == <font class="charliteral">'-'</font>) ? -1 : 1; 00451 <font class="keywordflow">break</font>; 00452 <font class="keywordflow">case</font> <font class="charliteral">'E'</font>: 00453 <font class="keywordflow">case</font> <font class="charliteral">'e'</font>: 00454 is >> ex; 00455 done = <font class="keyword">true</font>; 00456 <font class="keywordflow">break</font>; 00457 <font class="keywordflow">default</font>: 00458 a = 0; 00459 done = <font class="keyword">true</font>; 00460 point = -1; 00461 ex = 0; 00462 } 00463 } 00464 is>>c; 00465 } 00466 00467 <font class="keywordflow">if</font> (point >= 0) 00468 ex -= (nd - point); 00469 00470 00471 <font class="keywordflow">if</font> (ex != 0) { 00472 <font class="keywordflow">if</font> (ex > 0) 00473 <font class="keywordflow">for</font>(<font class="keywordtype">int</font> i=0; i<ex; i++) 00474 r *= 10; 00475 <font class="keywordflow">if</font> (ex < 0){ 00476 Scs inv_ten, ten; 00477 ten = 10; 00478 <a class="code" href="division__scs_8c.html#a0">scs_inv</a>(&(inv_ten.scsnb), &(ten.scsnb) ); 00479 <font class="keywordflow">for</font>(<font class="keywordtype">int</font> i=0; i>ex; i--) 00480 r *= inv_ten; 00481 } 00482 } 00483 } 00484 <font class="preprocessor">#endif</font> 00485 <font class="preprocessor"></font> 00486 </pre></div><hr><address align="right"><small>Generated on Tue Jun 17 10:15:51 2003 for SCSLib by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.15 </small></address> </body> </html>