#include "stdafx.hpp" int atoi(const string& s) { return atoi(s.c_str()); } double atof(const string& s) { return atof(s.c_str()); } string itoa(int n) { char buff[32]; _itoa(n, buff, 10); return string(buff); } //static int _finite( double n ){ // definition: exponent anything but 2047. // // int e; // 11 bit exponent // const int eMax = 2047; // 0x7ff, all bits = 1 // // int *pn = (int *) &n; // // e = *++pn; // Intel order! // e = ( e >> 20 ) & eMax; // // return e != eMax; //} // //static int _isnan( double n ){ // definition: exponent 2047, nonzero fraction. // // int e; // 11 bit exponent // const int eMax = 2047; // 0x7ff, all bits = 1 // // int *pn = (int *) &n; // // e = *++pn; // Intel order! // e = ( e >> 20 ) & eMax; // // if ( e != 2047 ) return 0; // almost always return here // // int fHi, fLo; // 52 bit fraction // // fHi = ( *pn ) & 0xfffff; // first 20 bits // fLo = *--pn; // last 32 bits // // return ( fHi | fLo ) != 0; // returns 0,1 not just 0,nonzero //} ///////////// //By FLOYD!// ///////////// string ftoa(float n) { static const int digits = 6; int eNeg = -4, ePos = 8; // limits for e notation. char buffer[50]; // from MSDN example, 25 would probably suffice string t; int dec, sign; if (_finite(n)) { // if ( digits < 1 ) digits = 1; // less than one digit is nonsense // if ( digits > 8 ) digits = 8; // practical maximum for float t = _ecvt(n, digits, &dec, &sign); if (dec <= eNeg + 1 || dec > ePos) { _gcvt(n, digits, buffer); t = buffer; return t; } // Here is the tricky case. We want a nicely formatted // number with no e-notation or multiple trailing zeroes. if (dec <= 0) { t = "0." + string(-dec, '0') + t; dec = 1; // new location for decimal point } else if (dec < digits) { t = t.substr(0, dec) + "." + t.substr(dec); } else { t = t + string(dec - digits, '0') + ".0"; dec += dec - digits; } // Finally, trim off excess zeroes. int dp1 = dec + 1, p = t.length(); while (--p > dp1 && t[p] == '0') ; t = string(t, 0, ++p); return sign ? "-" + t : t; } // end of finite case if (_isnan(n)) return "NaN"; if (n > 0.0) return "Infinity"; if (n < 0.0) return "-Infinity"; abort(); } /* string ftoa( float n ){ static const float min=.000001f,max=9999999.0f; int i=*(int*)&n; int e=(i>>23)&0xff; int f=i&0x007fffff; if( e==0xff && f ) return "NAN"; string t; int s=(i>>31)&0x01; if( e==0xff ){ t="INFINITY"; }else if( !e && !f ){ t="0.000000"; }else if( n>=min && n<=max ){ int dec,sgn; t=_fcvt( fabs(n),6,&dec,&sgn ); if( dec<=0 ){ t="0."+string( -dec,'0' )+t; }else if( dec