1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
//! FBS Cache //! use super::FBSCache; use std::num::NonZeroUsize; impl FBSCache { /// Construct a new instance of `FBSCache` /// /// ## Arguments /// /// - `gamma` parameter gamma of the algorithm /// - `tolerance` tolerance used for termination /// /// ## Memory allocation /// /// This method allocates new memory (which it owns, of course). You should avoid /// constructing instances of `FBSCache` in a loop or in any way more than /// absolutely necessary /// /// If you need to call an optimizer more than once, perhaps with different /// parameters, then construct an `FBSCache` only once /// /// This method will allocate memory for `2*n + 3` floats /// /// ## Panics /// /// This method will panic if there is no available memory for the required allocation /// (capacity overflow) /// pub fn new(n: NonZeroUsize, gamma: f64, tolerance: f64) -> FBSCache { FBSCache { work_gradient_u: vec![0.0; n.get()], work_u_previous: vec![0.0; n.get()], gamma: gamma, tolerance: tolerance, norm_fpr: std::f64::INFINITY, } } }