'use strict';

// MODULES //

var isnan = require( '@stdlib/math/base/utils/is-nan' );
var digamma = require( '@stdlib/math/base/special/digamma' );
var sqrt = require( '@stdlib/math/base/special/sqrt' );
var beta = require( '@stdlib/math/base/special/beta' );
var ln = require( '@stdlib/math/base/special/ln' );


// MAIN //

/**
* Returns the differential entropy of a Student's t distribution.
*
* @param {NonNegativeNumber} v - degrees of freedom
* @returns {number} entropy
*
* @example
* var v = entropy( 9.0 );
* // returns ~1.533
* @example
* var v = entropy( 2.0 );
* // returns ~1.96
* @example
* var v = entropy( 0.5 );
* // returns NaN
* @example
* var v = entropy( -0.2 );
* // returns NaN
* @example
* var v = entropy( NaN );
* // returns NaN
*/
function entropy( v ) {
	var out;
	var vh;
	if ( isnan( v ) || v <= 0.0 ) {
		return NaN;
	}
	vh = v / 2.0;
	out = ( v + 1.0 ) / 2.0;
	out *= digamma( ( 1.0+v ) / 2.0 ) - digamma( vh );
	out += ln( sqrt( v ) * beta( vh, 0.5 ) );
	return out;
} // end FUNCTION entropy()


// EXPORTS //

module.exports = entropy;

'use strict';

// MODULES //

var isnan = require( '@stdlib/math/base/utils/is-nan' );
var digamma = require( '@stdlib/math/base/special/digamma' );
var sqrt = require( '@stdlib/math/base/special/sqrt' );
var beta = require( '@stdlib/math/base/special/beta' );
var ln = require( '@stdlib/math/base/special/ln' );


// MAIN //

/**
* Returns the differential entropy of a Student's t distribution.
*
* @param {NonNegativeNumber} v - degrees of freedom
* @returns {number} entropy
*
* @example
* var v = entropy( 9.0 );
* // returns ~1.533
* @example
* var v = entropy( 2.0 );
* // returns ~1.96
* @example
* var v = entropy( -0.2 );
* // returns NaN
* @example
* var v = entropy( NaN );
* // returns NaN
*/
function entropy( v ) {
	var out;
	var vh;
	if ( isnan( v ) || v <= 0.0 ) {
		return NaN;
	}
	vh = v / 2.0;
	out = ( v + 1.0 ) / 2.0;
	out *= digamma( ( 1.0+v ) / 2.0 ) - digamma( vh );
	out += ln( sqrt( v ) * beta( vh, 0.5 ) );
	return out;
} // end FUNCTION entropy()


// EXPORTS //

module.exports = entropy;

Remove invalid example