Skip to main content

MulAddRef

Trait MulAddRef 

Source
pub trait MulAddRef {
    // Required method
    fn mul_add_ref(self, b: &Self, c: &Self) -> Self;
}
Expand description

Trait for fused multiply-add operations.

This trait provides methods for computing (self * b) + c efficiently.

§Why a custom MulAddRef trait?

This trait is distinct from num_traits::MulAdd primarily in its method signatures, which take b and c by reference (&Self). This is a deliberate design choice to:

  1. Maintain API Consistency: Aligns with the other operator traits in this library that support by-reference operations.
  2. Reduce Cloning: Allows implementors to avoid cloning values in performance-sensitive contexts, which is especially important for non-Copy types like rug::Float.

Implementors should aim to use hardware FMA (Fused Multiply-Add) instructions where available and appropriate for the underlying scalar type to improve performance and accuracy.

Required Methods§

Source

fn mul_add_ref(self, b: &Self, c: &Self) -> Self

Multiplies and adds in one fused operation, rounding to the nearest with only one rounding error.

a.mul_add_ref(b, c) produces a result like a * &b + &c.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl MulAddRef for Complex<f64>

Implementation of the MulAddRef trait for Complex<f64>.

Source§

fn mul_add_ref(self, b: &Self, c: &Self) -> Self

Multiplies and adds in one fused operation, rounding to the nearest with only one rounding error.

a.mul_add(b, c) produces a result like a * &b + &c.

Source§

impl MulAddRef for f64

Implementation of the MulAddRef trait for f64.

Source§

fn mul_add_ref(self, b: &Self, c: &Self) -> Self

Multiplies and adds in one fused operation, rounding to the nearest with only one rounding error.

a.mul_add(b, c) produces a result like a * &b + &c.

Implementors§