X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=flower%2Finclude%2Fpolynomial.hh;h=1959688d8d15ce2bf14f1cfe69c2ca44e16947f3;hb=1daa96e1881e50d9abcca1f8f81cd7259da30ab6;hp=1422f9d63d96e27c208d40a589614e1630807db9;hpb=91e7cbaa6e54e004365d28e0f10c9362a7f13320;p=lilypond.git diff --git a/flower/include/polynomial.hh b/flower/include/polynomial.hh index 1422f9d63d..1959688d8d 100644 --- a/flower/include/polynomial.hh +++ b/flower/include/polynomial.hh @@ -1,38 +1,55 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1993--2012 Han-Wen Nienhuys + + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . +*/ /* - * poly.h -- routines for manipulation of polynomials in one var - * - * (c) 1993--2005 Han-Wen Nienhuys + * polynomial.hh -- routines for manipulation of polynomials in one var */ #ifndef POLY_H #define POLY_H -#include "array.hh" +#include "std-vector.hh" #include "arithmetic-operator.hh" #include "real.hh" -/// structure for a polynomial in one var. +/// structure for a polynomial in one var. struct Polynomial { /// degree of polynomial - int degree ()const; + ssize_t degree ()const; - /// coefficients - Array coefs_; + /// coefficients + vector coefs_; // leading coef Real &lc (); // leading coef Real lc () const; - void print () const ; - Real eval (Real) const ; - void print_sols (Array) const ; - void check_sols (Array) const ; + void print () const; + Real eval (Real) const; + Real minmax (Real, Real, bool) const; + void print_sols (vector) const; + void check_sols (vector) const; void check_sol (Real x) const; - static Polynomial multiply (const Polynomial & p1, const Polynomial & p2); - static Polynomial power (int exponent, const Polynomial & src); + static Polynomial multiply (const Polynomial &p1, const Polynomial &p2); + static Polynomial power (int exponent, const Polynomial &src); /// chop low coefficients void clean (); @@ -41,42 +58,41 @@ struct Polynomial void real_clean (); void scalarmultiply (Real fact); void operator *= (Real f) { scalarmultiply (f); } - void operator /= (Real f) { scalarmultiply (1/f); } + void operator /= (Real f) { scalarmultiply (1 / f); } void operator += (Polynomial const &p2); void operator *= (Polynomial const &p2); void operator -= (Polynomial const &p2); - Polynomial (Real a, Real b =0.0); - Polynomial (){} - void set_negate (const Polynomial & src); - + Polynomial (Real a, Real b = 0.0); + Polynomial () {} + void set_negate (const Polynomial &src); + /// take the derivative void differentiate (); int set_mod (const Polynomial &u, const Polynomial &v); void debug_clean (); - Array solve_quadric ()const; - Array solve_cubic ()const; - Array solve_linear ()const; + vector solve_quadric ()const; + vector solve_cubic ()const; + vector solve_linear ()const; - Array solve () const; + vector solve () const; }; - -IMPLEMENT_ARITHMETIC_OPERATOR (Polynomial, - ); -IMPLEMENT_ARITHMETIC_OPERATOR (Polynomial, + ); -IMPLEMENT_ARITHMETIC_OPERATOR (Polynomial, * ); +IMPLEMENT_ARITHMETIC_OPERATOR (Polynomial, -); +IMPLEMENT_ARITHMETIC_OPERATOR (Polynomial, +); +IMPLEMENT_ARITHMETIC_OPERATOR (Polynomial, *); inline Polynomial operator * (Polynomial p, Real a) { - p *=a; + p *= a; return p; } inline Polynomial -operator * (Real a,Polynomial p) +operator * (Real a, Polynomial p) { - p *=a; + p *= a; return p; } #endif