# isUnityProbabilityArray

Test if a value is an array of probabilities that sum to one.

## Usage

``````var isUnityProbabilityArray = require( '@stdlib/assert/is-unity-probability-array' );
``````

#### isUnityProbabilityArray( value )

Tests if a `value` is an array of probabilities that sum to one.

``````var Uint8Array = require( '@stdlib/array/uint8' );

var bool = isUnityProbabilityArray( [ 0.25, 0.5, 0.25 ] );
// returns true

bool = isUnityProbabilityArray( new Uint8Array( [ 0, 1 ] ) );
// returns true

bool = isUnityProbabilityArray( [ 3.14, 0.0 ] );
// returns false
``````

## Notes

• Summation of finite-precision floating-point numbers often has numerical error. For example,

``````var arr = [ 0.1, 0.2, 0.1, 0.1, 0.2, 0.2, 0.1 ]; // => 1.0
var sum = 0.0;
var i;
for ( i = 0; i < arr.length; i++ ) {
sum += arr[ i ];
}
// sum => 0.9999999999999999
``````

To account for numerical error, the function tests if array elements sum to approximately one; specifically,

``````1.0 - sqrt(eps) <= sum(A) <= 1.0 + sqrt(eps)
``````

where `eps` is double-precision floating-point epsilon (`~2.22e-16`) and `sqrt(eps) ~ 1.49e-8`. The above comparison ensures equality for approximately half the significand bits.

## Examples

``````var Uint8Array = require( '@stdlib/array/uint8' );
var isUnityProbabilityArray = require( '@stdlib/assert/is-unity-probability-array' );

var arr = [ 0.0, 1.0 ];
var bool = isUnityProbabilityArray( arr );
// returns true

arr = [ 0.5, 0.25, 0.25 ];
bool = isUnityProbabilityArray( arr );
// returns true

arr = new Uint8Array( [ 0, 0, 1, 0 ] );
bool = isUnityProbabilityArray( arr );
// returns true

arr = [ 0.4, 0.4, 0.4 ];
bool = isUnityProbabilityArray( arr );
// returns false

arr = [ 3.14, -1.0 ];
bool = isUnityProbabilityArray( arr );
// returns false

bool = isUnityProbabilityArray( [] );
// returns false

bool = isUnityProbabilityArray( null );
// returns false
``````