eeab41af4e
- versione x64 compilata con Clang-cl/LLVM - modifiche varie per eliminare warning più gravi di questo compilatore.
91 lines
3.5 KiB
C++
91 lines
3.5 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2013-2014
|
|
//----------------------------------------------------------------------------
|
|
// File : JenkinsTraub.h Data : 08.01.14 Versione : 1.5a1
|
|
// Contenuto : Dichiarazione classi per il calcolo degli zeri di polinomi.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 08.01.14 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
const int POLY_MAXDEG = 32 ;
|
|
|
|
|
|
//--------------------------- Class Rpoly ------------------------------------
|
|
class Rpoly {
|
|
public : // methods
|
|
int Calculate( const double* op, int degree, double* zeror, double* zeroi) ;
|
|
|
|
private : // methods
|
|
void quad( double a, double b1, double c, double* sr, double* si,
|
|
double* lr, double* li) ;
|
|
void fxshfr( int l2, int* nz) ;
|
|
void quadit( double* uu, double* vv, int* nz) ;
|
|
void realit( double sss, int* nz, bool* pIflag) ;
|
|
void calcsc( int* type) ;
|
|
void nextk( int* type) ;
|
|
void newest( int type, double* uu, double* vv) ;
|
|
void quadsd( int n, double* u, double* v, double* p, double* q,
|
|
double* a, double* b) ;
|
|
|
|
public : // members
|
|
int itercnt ;
|
|
|
|
private : // members
|
|
int n ;
|
|
double sr, si, u, v, a, b, c, d, a1, a3, a7 ;
|
|
double e, f, g, h, szr, szi, lzr, lzi ;
|
|
double eta, are, mre ;
|
|
double p[POLY_MAXDEG+1] ;
|
|
double qp[POLY_MAXDEG+1] ;
|
|
double k[POLY_MAXDEG+1] ;
|
|
double qk[POLY_MAXDEG+1] ;
|
|
} ;
|
|
|
|
//--------------------------- Class Cpoly ------------------------------------
|
|
class Cpoly {
|
|
public : // methods
|
|
int Calculate( const double* opr, const double* opi, int degree, double* zeror, double* zeroi) ;
|
|
|
|
private : // methods
|
|
void noshft( const int l1) ;
|
|
void fxshft( const int l2, double* zr, double* zi, bool* pbConv) ;
|
|
void vrshft( const int l3, double* zr, double* zi, bool* pbConv) ;
|
|
void calct( bool* pbBol) ;
|
|
void nexth( bool bBol) ;
|
|
void polyev( const int nn, const double sr, const double si, const double pr[], const double pi[],
|
|
double qr[], double qi[], double *pvr, double *pvi) ;
|
|
double errev( const int nn, const double qr[], const double qi[],
|
|
const double ms, const double mp, const double are, const double mre) ;
|
|
void cauchy( const int nn, double pt[], double q[], double *fn_val) ;
|
|
double scale( const int nn, const double pt[], const double eta, const double infin,
|
|
const double smalno, const double base) ;
|
|
void cdivid( const double ar, const double ai, const double br, const double bi, double *cr, double *ci) ;
|
|
double cmod( const double r, const double i) ;
|
|
void mcon( double *eta, double *infiny, double *smalno, double *base) ;
|
|
|
|
public : // members
|
|
int itercnt ;
|
|
|
|
private : // members
|
|
int nn ;
|
|
double sr, si, tr, ti, pvr, pvi, are, mre, eta, infin ;
|
|
double pr[POLY_MAXDEG+1] ;
|
|
double pi[POLY_MAXDEG+1] ;
|
|
double hr[POLY_MAXDEG+1] ;
|
|
double hi[POLY_MAXDEG+1] ;
|
|
double qpr[POLY_MAXDEG+1] ;
|
|
double qpi[POLY_MAXDEG+1] ;
|
|
double qhr[POLY_MAXDEG+1] ;
|
|
double qhi[POLY_MAXDEG+1] ;
|
|
double shr[POLY_MAXDEG+1] ;
|
|
double shi[POLY_MAXDEG+1] ;
|
|
} ;
|