star-mc

Parallel estimation of Monte Carlo integrators
git clone git://git.meso-star.fr/star-mc.git
Log | Files | Refs | README | LICENSE

commit f11e1a62d03e91e51f31b5bf23f2ac5af198dc9f
parent 96f3253a1fd102b0056ff662258efc3225cba159
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Wed, 20 Apr 2016 14:54:54 +0200

Handle the nsample==0 case in smc_estimator_get_status

In this case fill the status E SE and V field with the zero of the type.

Diffstat:
Msrc/smc_estimator.c | 45++++++++++++++++++++++++++-------------------
1 file changed, 26 insertions(+), 19 deletions(-)

diff --git a/src/smc_estimator.c b/src/smc_estimator.c @@ -376,26 +376,33 @@ smc_estimator_get_status { estimator->status.N = estimator->nsamples; estimator->status.NF = estimator->nfailed; - /* Variance */ - estimator->type.divi - (estimator->status.E, estimator->square_value, estimator->nsamples); - estimator->type.mul - (estimator->status.V, estimator->value, estimator->value); - estimator->type.divi - (estimator->status.V, - estimator->status.V, - estimator->nsamples * estimator->nsamples); - estimator->type.sub - (estimator->status.V, estimator->status.E, estimator->status.V); - /* Standard error */ - estimator->type.divi - (estimator->status.SE, estimator->status.V, estimator->nsamples); - estimator->type.sqrt(estimator->status.SE, estimator->status.SE); - /* Expected value */ - estimator->type.divi - (estimator->status.E, estimator->value, estimator->nsamples); + + if(estimator->nsamples > 0) { + /* Variance */ + estimator->type.divi + (estimator->status.E, estimator->square_value, estimator->nsamples); + estimator->type.mul + (estimator->status.V, estimator->value, estimator->value); + estimator->type.divi + (estimator->status.V, + estimator->status.V, + estimator->nsamples * estimator->nsamples); + estimator->type.sub + (estimator->status.V, estimator->status.E, estimator->status.V); + /* Standard error */ + estimator->type.divi + (estimator->status.SE, estimator->status.V, estimator->nsamples); + estimator->type.sqrt(estimator->status.SE, estimator->status.SE); + /* Expected value */ + estimator->type.divi + (estimator->status.E, estimator->value, estimator->nsamples); + } + else { + estimator->type.zero(estimator->status.E); + estimator->type.zero(estimator->status.SE); + estimator->type.zero(estimator->status.V); + } } *status = estimator->status; return RES_OK; } -