本文整理汇总了C++中FunctionParser::EvalError方法的典型用法代码示例。如果您正苦于以下问题:C++ FunctionParser::EvalError方法的具体用法?C++ FunctionParser::EvalError怎么用?C++ FunctionParser::EvalError使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FunctionParser
的用法示例。
在下文中一共展示了FunctionParser::EvalError方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: assert
double ribi::gtst::ParametersGroupReAssign::CalculateNextPeriodPayoff(const double average_payoff) const
{
FunctionParser f;
//Parse the formula
f.Parse(m_next_period_payoff_function,"p");
assert(f.GetParseErrorType()== FunctionParser::FP_NO_ERROR);
//Evaluate the parsed formula
const double payoffs[1] = { average_payoff };
const double payoff_for_reaching_next_period = f.Eval(payoffs);
if (f.EvalError()!=0)
{
std::clog
<< "Function \'"
<< m_next_period_payoff_function
<< "\'could not be evaluated"
<< " for a payoff of "
<< average_payoff
<< '\n';
return 0.0;
}
return payoff_for_reaching_next_period;
}
示例2: QDialog
QtDialog::QtDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::QtDialog),
m_curve(new QwtPlotCurve("Sine")),
m_plot(new QwtPlot(QwtText("CppQwtExample1")))
{
ui->setupUi(this);
assert(!this->layout());
QLayout * const my_layout = new QVBoxLayout;
this->setLayout(my_layout);
#ifndef NDEBUG
my_layout->addWidget(new QLabel("DEBUG"));
#else
my_layout->addWidget(new QLabel("RELEASE"));
#endif
my_layout->addWidget(new QLabel( ("GCC version: " + GetGccVersion()).c_str()));
//my_layout->addWidget(new QLabel( ("Qt Creator version: " + GetQtCreatorVersion()).c_str()));
my_layout->addWidget(new QLabel( ("STL version: " + GetStlVersion()).c_str()));
my_layout->addWidget(new QLabel( ("Boost version: " + GetBoostVersion()).c_str()));
{
FunctionParser f;
f.Parse("x * x","x");
assert(f.GetParseErrorType()== FunctionParser::FP_NO_ERROR);
const double xs[1] = { M_PI };
const double y = f.Eval(xs);
assert(f.EvalError()==0);
my_layout->addWidget(new QLabel("Warp's function parser version: 4.5.1"));
}
{
m_plot->setGeometry(0,0,640,400);
m_plot->setAxisScale(QwtPlot::xBottom, 0.0,2.0 * M_PI);
m_plot->setAxisScale(QwtPlot::yLeft,-1.0,1.0);
std::vector<double> xs;
std::vector<double> ys;
for (double x = 0; x < 2.0 * M_PI; x+=(M_PI / 10.0))
{
xs.push_back(x);
ys.push_back(std::sin(x));
}
QwtPointArrayData * const data = new QwtPointArrayData(&xs[0],&ys[0],xs.size());
m_curve->setData(data);
m_curve->attach(m_plot);
m_plot->replot();
my_layout->addWidget(m_plot);
}
}
示例3: runtime_error
ribi::FunctionPlotterMainDialog::FunctionPlotterMainDialog(
const std::string& formula,
const double x_min,
const double x_max,
const int n_cols
) : m_x(std::vector<double>(n_cols,0.0)),
m_y(std::vector<double>(n_cols,0.0))
{
#ifndef NDEBUG
assert(Rescale(2.0,1.0,5.0,0.0,100.0) >= 24.9999 && Rescale(2.0,1.0,5.0,0.0,100.0) < 25.0001);
#endif
FunctionParser f;
f.Parse(formula,"x");
if (f.GetParseErrorType()!= FunctionParser::FP_NO_ERROR)
{
throw std::runtime_error("Function cannot not be parsed");
}
if (x_min >= x_max)
{
throw std::runtime_error("Value of x_min must be smaller than x_max");
}
//Evaluate the function in a 2D std::vector
const double n_cols_d = static_cast<double>(n_cols);
for (int x = 0; x!=n_cols; ++x)
{
const double xD = static_cast<double>(x);
const double x_scaled = Rescale(xD,0.0,n_cols_d,x_min,x_max);
const double xs[1] = { x_scaled };
const double y = f.Eval(xs);
if (!f.EvalError())
{
m_y[x] = y;
}
else
{
m_y[x] = 0.0;
}
m_x[x] = x_scaled;
}
}
示例4: catch
void ribi::QtToolSurfacePlotterMainDialog::OnAnyChange()
{
try { boost::lexical_cast<double>(ui->edit_minx->text().toStdString()); }
catch (boost::bad_lexical_cast&)
{
this->setWindowTitle("Value of x_min is not a valid double"); return;
}
try { boost::lexical_cast<double>(ui->edit_miny->text().toStdString()); }
catch (boost::bad_lexical_cast&)
{
this->setWindowTitle("Value of y_min is not a valid double"); return;
}
try { boost::lexical_cast<double>(ui->edit_maxx->text().toStdString()); }
catch (boost::bad_lexical_cast&)
{
this->setWindowTitle("Value of x_max is not a valid double"); return;
}
try { boost::lexical_cast<double>(ui->edit_maxy->text().toStdString()); }
catch (boost::bad_lexical_cast&)
{
this->setWindowTitle("Value of y_max is not a valid double"); return;
}
FunctionParser f;
//Parse the formula
f.Parse(ui->edit_equation->text().toStdString().c_str(),"x,y");
if (f.GetParseErrorType()!= FunctionParser::FP_NO_ERROR)
{
this->setWindowTitle("Function cannot not be parsed"); return;
}
const double x_min = boost::lexical_cast<double>(ui->edit_minx->text().toStdString());
const double y_min = boost::lexical_cast<double>(ui->edit_miny->text().toStdString());
const double x_max = boost::lexical_cast<double>(ui->edit_maxx->text().toStdString());
const double y_max = boost::lexical_cast<double>(ui->edit_maxy->text().toStdString());
if (x_min >= x_max)
{
this->setWindowTitle("Value of x_min must be smaller than x_max"); return;
}
if (y_min >= y_max)
{
this->setWindowTitle("Value of y_min must be smaller than y_max"); return;
}
//Evaluate the function in a 2D std::vector
const int n_rows = ui->surfaceplotwidget->height();
const int n_cols = ui->surfaceplotwidget->width();
std::vector<std::vector<double> > v(n_rows,std::vector<double>(n_cols,0.0));
const double n_rows_d = static_cast<double>(n_rows);
const double n_cols_d = static_cast<double>(n_cols);
for (int y = 0; y!=n_rows; ++y)
{
const double yD = static_cast<double>(y);
const double y_scaled = Rescale(yD,0.0,n_rows_d,y_min,y_max);
for (int x = 0; x!=n_cols; ++x)
{
const double xD = static_cast<double>(x);
const double x_scaled = Rescale(xD,0.0,n_cols_d,x_min,x_max);
const double xs[2] = { x_scaled,y_scaled };
const double z = f.Eval(xs);
if (!f.EvalError())
{
v[y][x] = z;
}
else
{
v[y][x] = 0.0;
}
}
}
this->setWindowTitle("Function plotted successfully");
//Plot the 2D std::vector
ui->surfaceplotwidget->SetSurfaceGrey(v);
}