diff --git a/apps/regression/go_to_parameter_controller.cpp b/apps/regression/go_to_parameter_controller.cpp index 8ad707a95..ae434babc 100644 --- a/apps/regression/go_to_parameter_controller.cpp +++ b/apps/regression/go_to_parameter_controller.cpp @@ -1,7 +1,9 @@ #include "go_to_parameter_controller.h" +#include "../apps_container.h" #include using namespace Shared; +using namespace Poincare; namespace Regression { @@ -42,6 +44,9 @@ void GoToParameterController::setParameterAtIndex(int parameterIndex, float f) { m_cursor->moveTo(f, y); } else { float x = m_store->xValueForYValue(f); + if (isnan(x)) { + return; + } m_store->centerAxisAround(CurveViewRange::Axis::X, x); m_store->centerAxisAround(CurveViewRange::Axis::Y, f); m_cursor->moveTo(x, f); @@ -72,6 +77,17 @@ void GoToParameterController::willDisplayCellForIndex(HighlightCell * cell, int } bool GoToParameterController::textFieldDidFinishEditing(TextField * textField, const char * text) { + AppsContainer * appsContainer = ((TextFieldDelegateApp *)app())->container(); + Context * globalContext = appsContainer->globalContext(); + float floatBody = Expression::parse(text)->approximate(*globalContext); + float parameter = m_store->yValueForXValue(floatBody); + if (!m_xPrediction) { + parameter = m_store->xValueForYValue(floatBody); + } + if (isnan(parameter)) { + app()->displayWarning("Valeur non atteinte par la regression"); + return false; + } FloatParameterController::textFieldDidFinishEditing(textField, text); StackViewController * stack = (StackViewController *)parentResponder(); stack->pop(); diff --git a/apps/regression/store.cpp b/apps/regression/store.cpp index 3a0929203..16ec6ba5a 100644 --- a/apps/regression/store.cpp +++ b/apps/regression/store.cpp @@ -231,6 +231,9 @@ float Store::yValueForXValue(float x) { } float Store::xValueForYValue(float y) { + if (fabsf(slope()) < FLT_EPSILON) { + return NAN; + } return (y - yIntercept())/slope(); } diff --git a/apps/shared/float_parameter_controller.cpp b/apps/shared/float_parameter_controller.cpp index 95488b5eb..6fe5a066f 100644 --- a/apps/shared/float_parameter_controller.cpp +++ b/apps/shared/float_parameter_controller.cpp @@ -39,6 +39,10 @@ bool FloatParameterController::textFieldDidFinishEditing(TextField * textField, AppsContainer * appsContainer = ((TextFieldDelegateApp *)app())->container(); Context * globalContext = appsContainer->globalContext(); float floatBody = Expression::parse(text)->approximate(*globalContext); + if (isnan(floatBody)) { + app()->displayWarning("Valeur non defini"); + return false; + } setParameterAtIndex(m_selectableTableView.selectedRow(), floatBody); willDisplayCellForIndex(m_selectableTableView.cellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow()), activeCell());