org.apache.commons.math.stat.descriptive.summary

## Class Product

- java.lang.Object
- - org.apache.commons.math.stat.descriptive.AbstractUnivariateStatistic
  - - org.apache.commons.math.stat.descriptive.AbstractStorelessUnivariateStatistic
    - - org.apache.commons.math.stat.descriptive.summary.Product

All Implemented Interfaces:
  java.io.Serializable, StorelessUnivariateStatistic, UnivariateStatistic, WeightedEvaluation

    public class Product
    extends AbstractStorelessUnivariateStatistic
    implements java.io.Serializable, WeightedEvaluation

Returns the product of the available values.

If there are no values in the dataset, or any of the values are `NaN`, then `NaN` is returned.

Note that this implementation is not synchronized. If multiple threads access an instance of this class concurrently, and at least one of the threads invokes the `increment()` or `clear()` method, it must be synchronized externally.

Version:
  $Revision: 1006299 $ $Date: 2010-10-10 16:47:17 +0200 (dim. 10 oct. 2010) $
See Also:
  Serialized Form

### Field Summary

Fields
`private long` `n` The number of values that have been added
`private static long` `serialVersionUID` Serializable version identifier
`private double` `value` The current Running Product.

### Constructor Summary

Constructors
Constructor and Description
`Product()` Create a Product instance
`Product(Product original)` Copy constructor, creates a new `Product` identical to the `original`

### Method Summary

Methods
`void` `clear()` Clears the internal state of the Statistic
`Product` `copy()` Returns a copy of the statistic with the same internal state.
`static void` `copy(Product source, Product dest)` Copies source to dest.
`double` `evaluate(double[] values, double[] weights)` Returns the weighted product of the entries in the input array.
`double` `evaluate(double[] values, double[] weights, int begin, int length)` Returns the weighted product of the entries in the specified portion of the input array, or `Double.NaN` if the designated subarray is empty.
`double` `evaluate(double[] values, int begin, int length)` Returns the product of the entries in the specified portion of the input array, or `Double.NaN` if the designated subarray is empty.
`long` `getN()` Returns the number of values that have been added.
`double` `getResult()` Returns the current value of the Statistic.
`void` `increment(double d)` Updates the internal state of the statistic to reflect the addition of the new value.

### Methods inherited from class org.apache.commons.math.stat.descriptive.AbstractStorelessUnivariateStatistic

`equals, evaluate, hashCode, incrementAll, incrementAll`

### Methods inherited from class org.apache.commons.math.stat.descriptive.AbstractUnivariateStatistic

`evaluate, getData, getDataRef, setData, setData, test, test`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### serialVersionUID

    private static final long serialVersionUID

Serializable version identifier

See Also:
  Constant Field Values

#### n

    private long n

The number of values that have been added

#### value

    private double value

The current Running Product.

### Constructor Detail

#### Product

    public Product()

Create a Product instance

#### Product

    public Product(Product original)

Copy constructor, creates a new `Product` identical to the `original`

Parameters:
  `original` - the `Product` instance to copy

### Method Detail

#### increment

    public void increment(double d)

Updates the internal state of the statistic to reflect the addition of the new value.

Specified by:
  `increment` in interface `StorelessUnivariateStatistic`
Specified by:
  `increment` in class `AbstractStorelessUnivariateStatistic`
Parameters:
  `d` - the new value.

#### getResult

    public double getResult()

Returns the current value of the Statistic.

Specified by:
  `getResult` in interface `StorelessUnivariateStatistic`
Specified by:
  `getResult` in class `AbstractStorelessUnivariateStatistic`
Returns:
  value of the statistic, `Double.NaN` if it has been cleared or just instantiated.

#### getN

    public long getN()

Returns the number of values that have been added.

Specified by:
  `getN` in interface `StorelessUnivariateStatistic`
Returns:
  the number of values.

#### clear

    public void clear()

Clears the internal state of the Statistic

Specified by:
  `clear` in interface `StorelessUnivariateStatistic`
Specified by:
  `clear` in class `AbstractStorelessUnivariateStatistic`

#### evaluate

    public double evaluate(double[] values,
                  int begin,
                  int length)

Returns the product of the entries in the specified portion of the input array, or `Double.NaN` if the designated subarray is empty.

Throws `IllegalArgumentException` if the array is null.

Specified by:
  `evaluate` in interface `UnivariateStatistic`
Overrides:
  `evaluate` in class `AbstractStorelessUnivariateStatistic`
Parameters:
  `values` - the input array
  `begin` - index of the first array element to include
  `length` - the number of elements to include
Returns:
  the product of the values or Double.NaN if length = 0
Throws:
  `java.lang.IllegalArgumentException` - if the array is null or the array index parameters are not valid
See Also:
  `UnivariateStatistic.evaluate(double[], int, int)`

#### evaluate

    public double evaluate(double[] values,
                  double[] weights,
                  int begin,
                  int length)

Returns the weighted product of the entries in the specified portion of the input array, or `Double.NaN` if the designated subarray is empty.

Throws `IllegalArgumentException` if any of the following are true:

- the values array is null
- the weights array is null
- the weights array does not have the same length as the values array
- the weights array contains one or more infinite values
- the weights array contains one or more NaN values
- the weights array contains negative values
- the start and length arguments do not determine a valid array

Uses the formula,

        weighted product = ∏values[i]weights[i]

that is, the weights are applied as exponents when computing the weighted product.

Specified by:
  `evaluate` in interface `WeightedEvaluation`
Parameters:
  `values` - the input array
  `weights` - the weights array
  `begin` - index of the first array element to include
  `length` - the number of elements to include
Returns:
  the product of the values or Double.NaN if length = 0
Throws:
  `java.lang.IllegalArgumentException` - if the parameters are not valid
Since:
  2.1

#### evaluate

    public double evaluate(double[] values,
                  double[] weights)

Returns the weighted product of the entries in the input array.

Throws `IllegalArgumentException` if any of the following are true:

- the values array is null
- the weights array is null
- the weights array does not have the same length as the values array
- the weights array contains one or more infinite values
- the weights array contains one or more NaN values
- the weights array contains negative values

Uses the formula,

        weighted product = ∏values[i]weights[i]

that is, the weights are applied as exponents when computing the weighted product.

Specified by:
  `evaluate` in interface `WeightedEvaluation`
Parameters:
  `values` - the input array
  `weights` - the weights array
Returns:
  the product of the values or Double.NaN if length = 0
Throws:
  `java.lang.IllegalArgumentException` - if the parameters are not valid
Since:
  2.1

#### copy

    public Product copy()

Returns a copy of the statistic with the same internal state.

Specified by:
  `copy` in interface `StorelessUnivariateStatistic`
Specified by:
  `copy` in interface `UnivariateStatistic`
Specified by:
  `copy` in class `AbstractStorelessUnivariateStatistic`
Returns:
  a copy of the statistic

#### copy

    public static void copy(Product source,
            Product dest)

Copies source to dest.

Neither source nor dest can be null.

Parameters:
  `source` - Product to copy
  `dest` - Product to copy to
Throws:
  `java.lang.NullPointerException` - if either source or dest is null