pub struct NewtonInversion {
pub iterations: u64,
pub denominator_cap_2k: u64,
}Expand description
A structure that defines the custom operation NewtonInversion that computes an inversion of a number via the Newton-Raphson method.
In particular, this operation computes an approximation of 2denominator_cap_2k / input.
Input must be of the scalar type UINT64 or INT64 and be in (0, 2denominator_cap_2k - 1) range. The input is also assumed to be small enough (less than 232), otherwise integer overflows are possible, yielding incorrect results.
Optionally, an initial approximation for the Newton-Raphson method can be provided. In this case, the operation might be faster and of lower depth, however, it must be guaranteed that 2denominator_cap_2k - 1 <= input * initial_approximation < 2denominator_cap_2k + 1.
§Custom operation arguments
- Node containing an unsigned or signed 64-bit array or scalar to invert
- Negative values are currently unsupported as sign extraction is quite expensive
- (optional) Node containing an array or scalar that serves as an initial approximation of the Newton-Raphson method
§Custom operation returns
New NewtonInversion node
§Example
let c = create_context().unwrap();
let g = c.create_graph().unwrap();
let t = array_type(vec![2, 3], UINT64);
let n1 = g.input(t.clone()).unwrap();
let guess_n = g.input(t.clone()).unwrap();
let n2 = g.custom_op(CustomOperation::new(NewtonInversion {iterations: 10, denominator_cap_2k: 4}), vec![n1, guess_n]).unwrap();Fields§
§iterations: u64Number of iterations of the Newton-Raphson method; rule of thumb is to set it to 1 + log(denominator_cap_2k)
denominator_cap_2k: u64Number of output bits that are approximated
Trait Implementations§
Source§impl Debug for NewtonInversion
impl Debug for NewtonInversion
Source§impl<'de> Deserialize<'de> for NewtonInversion
impl<'de> Deserialize<'de> for NewtonInversion
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Hash for NewtonInversion
impl Hash for NewtonInversion
Source§impl PartialEq for NewtonInversion
impl PartialEq for NewtonInversion
Source§impl Serialize for NewtonInversion
impl Serialize for NewtonInversion
impl Eq for NewtonInversion
impl StructuralPartialEq for NewtonInversion
Auto Trait Implementations§
impl Freeze for NewtonInversion
impl RefUnwindSafe for NewtonInversion
impl Send for NewtonInversion
impl Sync for NewtonInversion
impl Unpin for NewtonInversion
impl UnwindSafe for NewtonInversion
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.