// // LolRemez - Remez algorithm implementation // // Copyright: (c) 2010-2013 Sam Hocevar // This program is free software; you can redistribute it and/or // modify it under the terms of the Do What The Fuck You Want To // Public License, Version 2, as published by Sam Hocevar. See // http://www.wtfpl.net/ for more details. // #pragma once // // The RemezSolver class // --------------------- // #include class RemezSolver { public: typedef lol::real RealFunc(lol::real const &x); RemezSolver(int order, int decimals); void Run(lol::real a, lol::real b, RealFunc *func, RealFunc *weight = nullptr); private: void Init(); void FindZeroes(); lol::real FindExtrema(); void Step(); void PrintPoly(); lol::real EvalEstimate(lol::real const &x); lol::real EvalFunc(lol::real const &x); lol::real EvalWeight(lol::real const &x); private: /* User-defined parameters */ RealFunc *m_func, *m_weight; int m_order, m_decimals; /* Solver state */ lol::polynomial m_estimate; lol::array m_zeroes; lol::array m_control; lol::real m_k1, m_k2, m_epsilon; /* Statistics */ float m_stats_cheby; float m_stats_func; float m_stats_weight; };