mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-19 05:40:38 +01:00
[apps/graph] Avoid storing weird x values in the local context
Change-Id: Iee751da03fb9c6cda2e77d2570e8af2aef5ed5da
This commit is contained in:
@@ -15,6 +15,10 @@ class App : public Shared::TextFieldDelegateApp {
|
||||
public:
|
||||
App(Container * container, Poincare::Context * context);
|
||||
InputViewController * inputViewController();
|
||||
/* This local context can parse x. However, it always stores NAN
|
||||
* as x value. When we need to evaluate expression with a specific x value, we
|
||||
* use a temporary local context (on the stack). That way, we avoid keeping
|
||||
* weird x values after drawing curves or displaying the value table. */
|
||||
Poincare::Context * localContext() override;
|
||||
private:
|
||||
CartesianFunctionStore m_functionStore;
|
||||
|
||||
@@ -75,10 +75,11 @@ void Function::setActive(bool active) {
|
||||
}
|
||||
|
||||
float Function::evaluateAtAbscissa(float x, Poincare::Context * context) const {
|
||||
Poincare::VariableContext variableContext = Poincare::VariableContext(symbol(), context);
|
||||
Poincare::Symbol xSymbol = Poincare::Symbol(symbol());
|
||||
Poincare::Complex e = Poincare::Complex::Float(x);
|
||||
context->setExpressionForSymbolName(&e, &xSymbol);
|
||||
return m_expression->approximate(*context);
|
||||
variableContext.setExpressionForSymbolName(&e, &xSymbol);
|
||||
return m_expression->approximate(variableContext);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace Poincare {
|
||||
|
||||
VariableContext::VariableContext(char name, Context * parentContext) :
|
||||
m_name(name),
|
||||
m_value(Complex::Float(0.0f)),
|
||||
m_value(Complex::Float(NAN)),
|
||||
m_parentContext(parentContext)
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user