#include #include #include #include #include #include #include #include flt32_t fSolves=0.0f; /* counter of number of Chi solves */ #include #define __PTRC_TS_FRND \ (((flt32_t)(rand()-(RAND_MAX/2)))/((flt32_t)(RAND_MAX/2))) typedef struct _PTRC_TS_STATISTICAL_DATA_SET { flt32_t* pf32Vals; flt32_t f32ExpVal; flt32_t f32SigmaVal; flt32_t f32MinVal; flt32_t f32MaxVal; } _PTRC_STAT_DSET; typedef struct _PTRC_TS_CASES { flt32_t f32SensorUnc; _PTRC_STAT_DSET Errors; _PTRC_STAT_DSET Solves; uint64_t u64NofCases; } _PTRC_TS_CASES; int32_t __ptrc_ts_oneCase(const uint64_t u64D, const uint64_t u64NofS, const flt32_t f32RngMult, _PTRC_TS_CASES* const pCases); flt32_t __ptrc_ts_expVal(const flt32_t* const pf32Vals, uint64_t u64NofVals, const flt32_t f32DeltaX); int32_t __ptrc_ts_minMaxVals( flt32_t* const pf32Min, flt32_t* const pf32Max, const flt32_t* const pf32Vals, const uint64_t u64NofVals); int32_t main(void) { _PTRC_TS_CASES* pCases=NULL; uint64_t u64NofCasesBlocks= (uint64_t)((_PTRC_TS_MAX_SENSOR_UNCERTAINTY- _PTRC_TS_MIN_SENSOR_UNCERTAINTY)/ _PTRC_TS_SENSOR_UNCERTAINTY_INCREMENT)+1ul; int32_t err=0; srand((uint32_t)time(NULL)); pCases=malloc(u64NofCasesBlocks*sizeof(_PTRC_TS_CASES)); if(!pCases) { fprintf(stderr,"Error!!!!!\n"); return(1); } { uint64_t i; for(i=0ul;if32SensorUnc=_PTRC_TS_MIN_SENSOR_UNCERTAINTY+ (((flt32_t)i)*_PTRC_TS_SENSOR_UNCERTAINTY_INCREMENT); pCurCaseBlocks->u64NofCases=0ul; pCurCaseBlocks->Errors.f32ExpVal=pCurCaseBlocks->Errors.f32SigmaVal= pCurCaseBlocks->Solves.f32ExpVal=pCurCaseBlocks->Solves.f32SigmaVal= 0.0f; for(j=0ul;j<_PTRC_TS_NUM_OF_CASES_FOR_ONE_INCREMENT;j++) { err=__ptrc_ts_oneCase(_PTRC_TS_DIMENSIONALITY, _PTRC_TS_NUM_OF_SPHERES, _PTRC_TS_RANGE_MULTIPLIER, pCurCaseBlocks); if(err && err!=2) { uint64_t k; for(k=0ul;kf32SensorUnc*in.pfRds[i]; in.pfRds[i]+=fault; } } #if defined(_PTRC_TS_DATA_OUTPUT_MODE) printf(_PTRC_TS_FLOAT_OUTFORM" %lu\n", pCases->f32SensorUnc,_PTRC_MAX_ITERATIONS_ON_SPHERE); #endif /* _PTRC_TS_DATA_OUTPUT_MODE */ fSolves=0.0f; err=_ptrc_recoverPoint(pf32Res,&f32Qlt,in,_PTRC_TS_NUM_OF_RUNS); if(err) { if(pf32RealPnt) free(pf32RealPnt); if(in.pfCnt) free(in.pfCnt); if(in.pfRds) free(in.pfRds); if(pf32Res) free(pf32Res); return(2); } pCases->Errors.pf32Vals[pCases->u64NofCases]= __ptrc_EuclDist(pf32RealPnt,pf32Res,u64D); pCases->Solves.pf32Vals[pCases->u64NofCases]=fSolves; pCases->u64NofCases++; #if defined(_PTRC_TS_DATA_OUTPUT_MODE) { uint64_t j; printf("%d ",(-2)); for(j=0ul;jErrors.pf32Vals[(pCases->u64NofCases)-1ul]); } #endif /* _PTRC_TS_DATA_OUTPUT_MODE */ if(pf32RealPnt) free(pf32RealPnt); if(in.pfCnt) free(in.pfCnt); if(in.pfRds) free(in.pfRds); if(pf32Res) free(pf32Res); return(0); } flt32_t __ptrc_ts_expVal(const flt32_t* const pf32Vals, uint64_t u64NofVals, const flt32_t f32DeltaX) { flt32_t f32Res=0.0f; uint64_t i; for(i=0ul;i(*pf32Max)) *pf32Max=pf32Vals[i]; } return(0); }