# isUnityProbabilityArray
> Test if a value is an array of probabilities that sum to one.
## Usage
```javascript
var isUnityProbabilityArray = require( '@stdlib/assert/is-unity-probability-array' );
```
#### isUnityProbabilityArray( value )
Tests if a `value` is an array of probabilities that sum to one.
```javascript
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,
```javascript
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 ];
}
console.log( sum );
// => 0.9999999999999999
```
To account for numerical error, the function tests if array elements sum to approximately one; specifically,
```text
1.0 - sqrt(eps) <= sum(A) <= 1.0 + sqrt(eps)
```
where `eps` is [double-precision floating-point][ieee754] epsilon (`~2.22e-16`) and `sqrt(eps) ~ 1.49e-8`. The above comparison ensures equality for approximately half the significand bits.
## Examples
```javascript
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
```
[ieee754]: https://en.wikipedia.org/wiki/IEEE_floating_point