Пример #1
0
void print_spectrum(int L, int M, int N, int precision, rsn_spectrum spectrum, const char* file) {
	int z,y,x,i,l,padding = 0;
	double max,min;
	max = min = spectrum[0];
	for(i = 0; i < L*M*N; i++) {
		if((l = log10f(spectrum[i])) > padding) padding = l;
		if(spectrum[i] < min) min = spectrum[i];
		else if(spectrum[i] > max) max = spectrum[i];
	}
	printf("Minimum frequency: %f\nMaximum frequency: %f\n",(double)min,(double)max);
	padding += precision + 2;
	char p[padding+1];
	FILE* f = fopen(file,"w");
	for(z = 0; z < L; z++) {
		fprintf(f,"Plane %d\n",z);
		for(y = 0; y < M; y++) {
			for(x = 0; x < N; x++) {
#if RSN_PRECISION == QUAD
				quadmath_snprintf(p,padding+1,"%*.*"RSN_PRECISION_FORMAT,padding,precision,spectrum[z*M*N+y*N+x]);
#else
				snprintf(p,padding+1,"%*.*"RSN_PRECISION_FORMAT,padding,precision,spectrum[z*M*N+y*N+x]);
#endif
				fputs(p,f);
			}
			fputc('\n',f);
		}
		fputc('\n',f);
	}
	fclose(f);
}
Пример #2
0
ostream& operator<<( ostream& os, const Quad& alpha )
{
    char str[128];
    quadmath_snprintf( str, 128, "%Qe", alpha );
    os << str;
    return os;
}
Пример #3
0
// Imprimir coeficientes
void TDMA::printCoefficients(void)
{
    std::cout<<std::endl<<std::endl;
    std::cout<<std::endl<<std::setfill('-')<<std::setw(5+4*OUT_FLOAT_WIDTH)<<""<<std::setfill(' ');
    std::cout<<std::endl<<std::setw(5)<<std::right<<"p";
    std::cout<<std::setw(OUT_FLOAT_WIDTH)<<std::right<<"ap";
    std::cout<<std::setw(OUT_FLOAT_WIDTH)<<std::right<<"aw";
    std::cout<<std::setw(OUT_FLOAT_WIDTH)<<std::right<<"ae";
    std::cout<<std::setw(OUT_FLOAT_WIDTH)<<std::right<<"bp";
    std::cout<<std::endl<<std::setfill('-')<<std::setw(5+4*OUT_FLOAT_WIDTH)<<""<<std::setfill(' ');

    std::cout.precision(OUT_FLOAT_PRECISION);
    std::cout<<std::scientific;


#ifdef QUAD_PRECISION
    char str[1000];
    for(tInteger i=0;i<neq;i++){
        std::cout<<std::endl;
        std::cout<<std::setw(5)<<i;
        quadmath_snprintf(str, 1000, Q_FORMAT,equation[i][0]);
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<str;
        quadmath_snprintf(str, 1000, Q_FORMAT,equation[i][1]);
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<str;
        quadmath_snprintf(str, 1000, Q_FORMAT,equation[i][2]);
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<str;
        quadmath_snprintf(str, 1000, Q_FORMAT,equation[i][3]);
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<str;
    }
    std::cout<<std::endl<<std::setfill('-')<<std::setw(5+4*OUT_FLOAT_WIDTH)<<""<<std::setfill(' ');
#else
    for(tInteger i=0;i<neq;i++){
        std::cout<<std::endl;
        std::cout<<std::setw(5)<<i;
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<equation[i][0];
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<equation[i][1];
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<equation[i][2];
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<equation[i][3];
    }
    std::cout<<std::endl<<std::setfill('-')<<std::setw(5+4*OUT_FLOAT_WIDTH)<<""<<std::setfill(' ');
#endif
}
Пример #4
0
   std::string str(std::streamsize digits, std::ios_base::fmtflags f)const
   {
#ifndef BOOST_MP_USE_QUAD
      char buf[100];
      boost::scoped_array<char> buf2;
      std::string format = "%";
      if(f & std::ios_base::showpos)
         format += "+";
      if(f & std::ios_base::showpoint)
         format += "#";
      format += ".*";
      if(digits == 0)
         digits = 36;
      format += "Q";
      if(f & std::ios_base::scientific)
         format += "e";
      else if(f & std::ios_base::fixed)
         format += "f";
      else
         format += "g";

      int v = quadmath_snprintf (buf, 100, format.c_str(), digits, m_value);

      if((v < 0) || (v >= 99))
      {
         int v_max = v;
         buf2.reset(new char[v+3]);
         v = quadmath_snprintf (&buf2[0], v_max + 3, format.c_str(), digits, m_value);
         if(v >= v_max + 3)
         {
            BOOST_THROW_EXCEPTION(std::runtime_error("Formatting of float128_type failed."));
         }
         return &buf2[0];
      }
      return buf;
#else
      return boost::multiprecision::detail::convert_to_string(*this, digits ? digits : 37, f);
#endif
   }
Пример #5
0
static PyObject *
pyquad_repr(PyObject *self)
{
    char str[128];
    int st;
    qdouble q = PyQuad_AsQuad(self);

    st = quadmath_snprintf(str, sizeof(str), "%#.*Qf", FLT128_DIG, q);
    if (st < 0) {
        fprintf(stderr, "BAD\n");
    }
    return PyString_FromString(str);
}
Пример #6
0
// Imprime solução na tela
void TDMA::printSolution(void)
{
    std::cout<<std::endl;
    std::cout<<std::endl<<std::setfill('-')<<std::setw(5+3*OUT_FLOAT_WIDTH)<<""<<std::setfill(' ');
    std::cout<<std::endl<<std::setw(5)<<std::right<<"p";
    std::cout<<std::setw(OUT_FLOAT_WIDTH)<<std::right<<"Pp";
    std::cout<<std::setw(OUT_FLOAT_WIDTH)<<std::right<<"Qp";
    std::cout<<std::setw(OUT_FLOAT_WIDTH)<<std::right<<"Tp";
    std::cout<<std::endl<<std::setfill('-')<<std::setw(5+3*OUT_FLOAT_WIDTH)<<""<<std::setfill(' ');

    std::cout.precision(OUT_FLOAT_PRECISION);
    std::cout<<std::scientific;

#ifdef QUAD_PRECISION
    char str[1000];
    for(tInteger i=0;i<neq;i++){
        std::cout<<std::endl;
        std::cout<<std::setw(5)<<i;
        quadmath_snprintf(str, 1000, Q_FORMAT,P[i]);
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<str;
        quadmath_snprintf(str, 1000, Q_FORMAT,Q[i]);
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<str;
        quadmath_snprintf(str, 1000, Q_FORMAT,T[i]);
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<str;
    }
    std::cout<<std::endl<<std::setfill('-')<<std::setw(5+3*OUT_FLOAT_WIDTH)<<""<<std::setfill(' ');
#else
    for(tInteger i=0;i<neq;i++){
        std::cout<<std::endl;
        std::cout<<std::setw(5)<<i;
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<P[i];
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<Q[i];
        std::cout<<std::setw(OUT_FLOAT_WIDTH)<<T[i];
    }
    std::cout<<std::endl<<std::setfill('-')<<std::setw(5+3*OUT_FLOAT_WIDTH)<<""<<std::setfill(' ');
#endif
}
Пример #7
0
/* print out a longdouble to a std::string */
std::string print_longdouble(const longdouble &ld)
{
    char buf[1024];
#ifdef LONGDOUBLE_IS_FLOAT128
    quadmath_snprintf(buf,1024, "%Qg", ld);
#endif

#ifdef LONGDOUBLE_IS_IEEE754
    ld_sprintf(buf, "%Lg", ld);
#endif

#ifdef LONGDOUBLE_IS_DDREAL
    ld.write(buf);
#endif
    return std::string(buf);

}
std::string print2(tFloat value)
{
    char str[1000];
    quadmath_snprintf(str, 1000, "%.3Qe",value);
    return std::string(str);
}
std::string print(tFloat value)
{
    char str[1000];
    quadmath_snprintf(str, 1000, Q_FORMAT,value);
    return std::string(str);
}
Пример #10
0
int main()
{

/*------ declarations --------------------------------------------------*/    

     int i;   
	
     gauss_method gsmethod,gsmethod2;
     solution u,u2;
     toptions options,options2;
     parameters params;
     ode_sys system;   
     solver_stat thestat,thestat2;

     clock_t clock0, clock1; 
     time_t  wtime0,wtime1;

     params.rpar =(val_type *)malloc(MAXPARAM*sizeof(val_type));
     params.ipar =(int *)malloc(MAXPARAM*sizeof(int));

     u.uu = (val_type *)malloc(MAXNEQ*sizeof(val_type));
     u.ee = (val_type *)malloc(MAXNEQ*sizeof(val_type));
     u2.uu = (val_type *)malloc(MAXNEQ*sizeof(val_type));
     u2.ee = (val_type *)malloc(MAXNEQ*sizeof(val_type));

     options.rtol=malloc(MAXNEQ*sizeof(val_type));
     options.atol=malloc(MAXNEQ*sizeof(val_type));
  
#    if PREC ==2  //QUADRUPLEPRECISION
     int n;
     int width = 46;
     char buf[128];
#    endif

/* ----------- implementation  ---------------------------------------*/     


/* ----------- integration parameters---------------------------------*/  

     gsmethod.ns = 6;     				 //	 Stages.
     options.h = POW(2,-7);	       			 //	 Stepsize. 
     options.sampling=1;   			 	 //      

     system.f = Ode1;					 //	 Odefun (GaussUserProblem.c: OdePendulum,OdeNBody)
     system.ham= Ham1;					 //      Hamiltonian (GaussUserProblem.c: HamPendulum,HamNBody)

     system.problem =1; 				 //	 Initial values (GaussInitData.c).

     options.approximation=1;   			 //      Approximation: Y^[0] (GaussCommon.c/Yi_init()).
	
     strncpy(thestat.filename, "AllSolve1.bin",STRMAX);   //     Output filename.

     options.algorithm=1;    				 //	 1=Jacobi;  11=Seidel;    
     options.rdigits=0;       
     options2.rdigits=3;

/* ----------- execution  ------------------------------------------*/

     printf("Begin execution \n");
     printf("method=%i, problem=%i, algorithm=%i\n",gsmethod.ns,system.problem,options.algorithm);
     printf("approximation=%i,sampling=%i\n",options.approximation,options.sampling);

#if PREC ==2  //QUADRUPLEPRECISION
     printf("options.h=");
     n = quadmath_snprintf(buf, sizeof buf, "%+-#*.30Qe", width, options.h);
     if ((size_t) n < sizeof buf) printf("%s\n",buf);
#else         //DOUBLEPRECISION
     printf("options.h=%lg\n", options.h);        
#endif 
     printf("----------------\n");
        
     InitialData (&options,&u,&params,&system);                 
     system.params.rpar=&params.rpar[0];
     system.params.ipar=&params.ipar[0];
     
     for (i=0; i<system.neq; i++)
     {
          options.rtol[i]=RTOL;
          options.atol[i]=ATOL;
     }

     if (options.rdigits>0) options.mrdigits=pow(2,options.rdigits);
     if (options2.rdigits>0) options2.mrdigits=pow(2,options2.rdigits);

     GaussCoefficients(&gsmethod,&options);
   
     InitStat(&system,&gsmethod,&thestat);	
   

     print_u(system.neq, u.uu);

     wtime0= time(NULL);
     clock0= clock();

     select_gauss(&gsmethod, &gsmethod2, &u, &u2,&system,
                  &options, &options2, &thestat, &thestat2);
  
     clock1=clock();
     wtime1= time(NULL);

     printf("End execution \n");
        
     if (thestat.convergence==SUCCESS)
     {
           printf("Execution Correct\n");
           printf("convergence=%i.  (=0 correct;=-1 incorrect)\n",thestat.convergence);        

           print_u (system.neq,u.uu);
#if PREC ==2  //QUADRUPLEPRECISION
           printf("Max-DE");
           n = quadmath_snprintf(buf, sizeof buf, "%+-#*.30Qe", width, thestat.MaxDE);
           if ((size_t) n < sizeof buf) printf("%s\n",buf);
#else  // DOUBLEPRECISION    
           printf("Energy MaxDE=%.20lg\n",thestat.MaxDE);
#endif                      

           printf ("\nCPU time:%lg\n", (double) (clock1 - clock0)/CLOCKS_PER_SEC);
	   printf ("Elapsed wall clock time: %ld\n", (wtime1 - wtime0));
           printf ("Elapsed wall clock time: %lg\n", difftime(wtime1, wtime0));

           printf("\n");
           
           printf("stepcount=%i\n",thestat.stepcount);
           printf("nout=%i\n",thestat.nout);
           
           printf("fixed-point iterations=%i\n",thestat.totitcount);
           printf("max fixed-point iterations=%i\n",thestat.maxitcount);        
           printf("deltaZero iterations=%i\n",thestat.itzero); 
 
           printf("\n");

           printf ("function ebaluations\n");
           printf("fcn=%i\n",thestat.fcn);
           printf ("\n");

     }
     else
     {
           printf("Execution InCorrect\n");
           printf("convergence=%i.  (=0 correct;=-1 incorrect)\n",thestat.convergence);
     }
 
     free(params.rpar); free(params.ipar);
     free(u.uu); free(u.ee);
     free(u2.uu); free(u2.ee);
    
     exit(0);

}
Пример #11
0
int ld_vsprintf(char *buf, const char *__format, va_list args){
    char fmt[BUFSIZE];
    char qfmt[BUFSIZE];
    va_list oargs;
    const char *c;
    const char *e;
    char* o=buf;
    c=__format;
    do {
        if (*c!='%'){
            *o=*c;
            ++o;
            continue;
        }

        e=c+1;
        do {
            if (*e=='%'){
                *o='%';
                ++o;
                ++c;
                break;
            }
            if (*e=='L' && (*(e+1)=='f' || *(e+1)=='g' || *(e+1) == 'e')){
                longdouble ld = va_arg(args,longdouble);
                size_t n=e-c;
                ++e;
                memcpy(qfmt,c,n);
                qfmt[n]='Q';
                qfmt[n+1]=*e;
                qfmt[n+2]='\0';
                quadmath_snprintf(o,BUFSIZE-(o-buf),qfmt, ld);
                while(*(++o)!='\0'){
                    continue;
                }
                c+=n+1;
                break;
            }
            if ( *e=='u' || *e=='d' || *e=='x' || *e=='X' || *e=='o' || *e=='i' || *e=='c'){ 
                size_t n=e-c;
                memcpy(qfmt,c,n+1);
                qfmt[n+1]='\0';

                if(*(e-1)=='l' && *(e-2)=='l'){
                    long long int str = va_arg(args,long long int);
                    sprintf(o,qfmt,str);
                } else {
                    int str = va_arg(args,int);
                    sprintf(o,qfmt,str);
                }
                --c;
                while(*(++o)!='\0'){
                    continue;
                }
                c+=n+1;

                break;

            }
            if ( *e=='f' || *e=='g' || *e=='e') {
                size_t n=e-c;
                memcpy(qfmt,c,n+1);
                qfmt[n+1]='\0';
                double str = va_arg(args,double);
                sprintf(o,qfmt,str);
                --c;
                while(*(++o)!='\0'){
                    continue;
                }
                c+=n+1;

                break;
            }
Пример #12
0
template<> std::string toString<float128>(const float128& f) {
	char buf[128];
	quadmath_snprintf(buf,sizeof(buf),"%." stringize(FLT128_DIG) "Qf",f);
	return (const char*)buf;
}