fixed the precision problem in converting double to long long int (0.0000325 *1E9), cant find another example

This commit is contained in:
Dhanya Maliakal 2017-06-13 12:58:56 +02:00
parent 3d8903b2da
commit cb7b8713cf

View File

@ -4212,12 +4212,16 @@ string slsDetectorCommand::cmdTimer(int narg, char *args[], int action) {
if (action==PUT_ACTION) { if (action==PUT_ACTION) {
if (sscanf(args[1],"%lf", &val)) if (sscanf(args[1],"%lf", &val))
; ;//printf("value:%0.9lf\n",val);
else else
return string("cannot scan timer value ")+string(args[1]); return string("cannot scan timer value ")+string(args[1]);
if (index==ACQUISITION_TIME || index==SUBFRAME_ACQUISITION_TIME || index==FRAME_PERIOD || index==DELAY_AFTER_TRIGGER) if (index==ACQUISITION_TIME || index==SUBFRAME_ACQUISITION_TIME || index==FRAME_PERIOD || index==DELAY_AFTER_TRIGGER) {
t=(int64_t)(val*1E+9); // t=(int64_t)(val*1E+9); for precision of eg.0.0000325, following done
else t=(int64_t)val; val*=1E9;
t = (int64_t)val;
if(fabs(val-t)) // to validate precision loss
t = t + val - t; //even t += vak-t loses precision
}else t=(int64_t)val;
} }