Files
Upsilon/apps/probability/law.cpp
Émilie Feral 2a79d8bfd9 [apps/probability] Make law model an abstract class with inheritance for
all specific laws (binomial...)

Change-Id: Ida6d5bfb7a3fbfc288393cd2f7e9e9b934798073
2016-12-15 13:51:40 +01:00

36 lines
800 B
C++

#include "law.h"
#include <math.h>
namespace Probability {
Law::Law(EvaluateContext * evaluateContext):
m_evaluateContext(evaluateContext)
{
}
EvaluateContext * Law::evaluateContext() {
return m_evaluateContext;
}
float Law::gridUnit() {
int a = 0;
int b = 0;
float d = xMax() - xMin();
float units[3] = {k_oneUnit, k_twoUnit, k_fiveUnit};
for (int k = 0; k < 3; k++) {
float unit = units[k];
if (floorf(log10f(d/(unit*k_maxNumberOfXGridUnits))) != floorf(log10f(d/(unit*k_minNumberOfXGridUnits)))) {
b = floorf(log10f(d/(unit*k_minNumberOfXGridUnits)));
a = unit;
}
}
return a*powf(10,b);
}
float Law::evaluateAtAbscissa(float t) const {
m_evaluateContext->setOverridenValueForSymbolT(t);
return expression()->approximate(*m_evaluateContext);
}
}