@@ -1019,6 +1019,12 @@ const PRECISION_LOWER_BOUND_DENOMINATOR: u64 = approx::LOWER_BITS_BOUND;
10191019const  AMOUNT_PENALTY_DIVISOR :  u64  = 1  << 20 ; 
10201020const  BASE_AMOUNT_PENALTY_DIVISOR :  u64  = 1  << 30 ; 
10211021
1022+ /// Raises three `f64`s to the 3rd power, without `powi` because it requires `std` (dunno why). 
1023+ #[ inline( always) ]  
1024+ fn  three_f64_pow_3 ( a :  f64 ,  b :  f64 ,  c :  f64 )  -> ( f64 ,  f64 ,  f64 )  { 
1025+ 	( a *  a *  a,  b *  b *  b,  c *  c *  c) 
1026+ } 
1027+ 
10221028/// Given liquidity bounds, calculates the success probability (in the form of a numerator and 
10231029/// denominator) of an HTLC. This is a key assumption in our scoring models. 
10241030/// 
@@ -1055,9 +1061,9 @@ fn success_probability(
10551061			// calculate the cumulative density function between the min/max bounds trivially. Note 
10561062			// that we don't bother to normalize the CDF to total to 1, as it will come out in the 
10571063			// division of num / den. 
1058- 			let  max_pow =  ( max - 0.5 ) . powi ( 3 ) ; 
1059- 			let  num = max_pow - ( amount -  0.5 ) . powi ( 3 ) ; 
1060- 			let  den = max_pow - ( min -  0.5 ) . powi ( 3 ) ; 
1064+ 			let  ( max_pow,  amt_pow ,  min_pow )  =  three_f64_pow_3 ( max - 0.5 ,  amount -  0.5 ,  min -  0.5 ) ; 
1065+ 			let  num = max_pow - amt_pow ; 
1066+ 			let  den = max_pow - min_pow ; 
10611067
10621068			// Because our numerator and denominator max out at 0.5^3 we need to multiply them by 
10631069			// quite a large factor to get something useful (ideally in the 2^30 range). 
0 commit comments