@@ -233,5 +233,38 @@ pub fn gammar_pitau_reg5(pi: f64, tau: f64) -> f64 {
233233 result += IJn [ 4 ] . 2 * 18.0 * pi * tau_6* tau_2; // I=2,J=9, 18
234234 result += IJn [ 5 ] . 2 * 21.0 * pi* pi * tau_6; // I=3,J=27, 21
235235 return result
236- // poly_ij_powi(pi, tau, &IJn)
237- }
236+ // poly_ij_powi(pi, tau, &IJn)
237+ }
238+
239+ // improve performance 10% ,but code complexity is increased
240+ #[ inline( always) ]
241+ pub fn gammar_pi_tau_reg5 ( pi : f64 , tau : f64 ) -> ( f64 , f64 ) {
242+ let mut item: f64 =0.0 ;
243+ let mut result_pi: f64 = 0.0 ;
244+ let mut result_tau: f64 = 0.0 ;
245+ // I 1 1 1 2 2 3
246+ // J 1 2 3 3 9 7
247+ let pi_2: f64 = pi* pi;
248+ let tau_2: f64 =tau* tau;
249+ let tau_3: f64 =tau_2* tau;
250+ let tau_6: f64 =tau_3* tau_3;
251+ item = IJn [ 0 ] . 2 * pi* tau;
252+ result_pi += item;
253+ result_tau += item;
254+ item = IJn [ 1 ] . 2 * pi* tau_2;
255+ result_pi += item;
256+ result_tau += 2.0 * item;
257+ item = IJn [ 2 ] . 2 * pi* tau_3;
258+ result_pi += item;
259+ result_tau += 3.0 * item;
260+ item = IJn [ 3 ] . 2 * pi_2* tau_3;
261+ result_pi += 2.0 * item;
262+ result_tau += 3.0 * item;
263+ item = IJn [ 4 ] . 2 * pi_2* tau_6* tau_3;
264+ result_pi += 2.0 * item;
265+ result_tau += 9.0 * item;
266+ item = IJn [ 5 ] . 2 * pi_2* pi* tau_6* tau;
267+ result_pi += 3.0 * item;
268+ result_tau += 7.0 * item;
269+ ( result_pi/pi, result_tau/tau)
270+ }
0 commit comments