# mpy

Multiply two objects using `fimath` object

## Syntax

```c = mpy(F,a,b) ```

## Description

`c = mpy(F,a,b)` performs elementwise multiplication on `a` and `b` using `fimath` object `F`. This is helpful in cases when you want to override the `fimath` objects of `a` and `b`, or if the `fimath` properties associated with `a` and `b` are different. The output `fi` object `c` has no local fimath.

`a` and `b` can both be `fi` objects with the same dimensions unless one is a scalar. If either `a` or `b` is scalar, then `c` has the dimensions of the nonscalar object. `a` and `b` can also be doubles, singles, or integers.

## Examples

In this example, `c` is the 40-bit product of `a` and `b` with fraction length 30.

```a = fi(pi); b = fi(exp(1)); F = fimath('ProductMode','SpecifyPrecision',... 'ProductWordLength',40,'ProductFractionLength',30); c = mpy(F, a, b) ```
```c = 8.5397 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 40 FractionLength: 30 ```

## Algorithms

`c = mpy(F,a,b)` is similar to

```a.fimath = F; b.fimath = F; c = a .* b c = 8.5397 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 40 FractionLength: 30 RoundingMethod: nearest OverflowAction: saturate ProductMode: SpecifyPrecision ProductWordLength: 40 ProductFractionLength: 30 SumMode: FullPrecision ```

but not identical. When you use `mpy`, the `fimath` properties of `a` and `b` are not modified, and the output `fi` object `c` has no local fimath. When you use the syntax `c = a .* b`, where `a` and `b` have their own `fimath` objects, the output `fi` object `c` gets assigned the same `fimath` object as inputs `a` and `b`. See fimath Rules for Fixed-Point Arithmetic in the Fixed-Point Designer™ User's Guide for more information.

## Extended Capabilities 