// TODO: NEED TO DEAL WITH Inf/NA/NaN void rtexpon_rate(double *x, double *left, double *right, double *rate, int *num) { RNG r; #ifdef USE_R GetRNGstate(); #endif for(int i=0; i < *num; ++i){ #ifdef USE_R if (i%SAMPCHECK==0) R_CheckUserInterrupt(); if (ISNAN(left[i]) || ISNAN(right[i]) || ISNAN(rate[i]) || !R_FINITE(left[i]) || ISNA(left[i]) || ISNA(right[i]) || ISNA(rate[i]) ) { x[i] = R_NaN; fprintf(stderr, "rtexpon_rate: caught non finite left value: %g; x[i] = %g.\n", left[i], x[i]); } #endif // TODO: Really, I need to check if it is +/- Inf. if (MYFINITE(right[i])) x[i] = r.texpon_rate(left[i], right[i], rate[i]); else x[i] = r.texpon_rate(left[i], rate[i]); } #ifdef USE_R PutRNGstate(); #endif }
void rtexpon_rate_both(double *x, double *left, double *right, double *rate, int *num) { RNG r; #ifdef USE_R GetRNGstate(); #endif for(int i=0; i < *num; ++i){ #ifdef USE_R if (i%SAMPCHECK==0) R_CheckUserInterrupt(); #endif x[i] = r.texpon_rate(left[i], right[i], rate[i]); } #ifdef USE_R PutRNGstate(); #endif }