'use strict';

// MODULES //

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


// FACTORY //

/**
* Returns a function for evaluating the probability density function (PDF) for a Student's t distribution with `v` degrees of freedom.
*
* @param {PositiveNumber} v - degrees of freedom
* @returns {Function} PDF
*
* @example
* var pdf = factory( 1.0 );
* var y = pdf( 3.0 );
* // returns ~0.032
*
* y = pdf( 1.0 );
* // returns ~0.159
*/
function factory( v ) {
	var exponent;
	var betaTerm;

	if ( isnan( v ) || v <= 0 ) {
		return nan;
	}
	betaTerm = sqrt(v) * beta( v/2.0, 0.5 );
	exponent = ( 1.0 + v ) / 2.0;
	/**
	* Evaluates the probability density function (PDF) for a Student's t distribution.
	*
	* @private
	* @param {number} x - input value
	* @returns {number} evaluated PDF
	*
	* @example
	* var y = pdf( 2.3 );
	* // returns <number>
	*/
	return function pdf( x ) {
		if ( isnan( x ) ) {
			return NaN;
		}
		return pow( v / ( v + pow( x, 2.0 ) ), exponent ) / betaTerm;
	}; // end FUNCTION pdf()
} // end FUNCTION factory()


// EXPORTS //

module.exports = factory;

'use strict';

// MODULES //

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


// FACTORY //

/**
* Returns a function for evaluating the probability density function (PDF) for a Student's t distribution with `v` degrees of freedom.
*
* @param {PositiveNumber} v - degrees of freedom
* @returns {Function} PDF
*
* @example
* var pdf = factory( 1.0 );
* var y = pdf( 3.0 );
* // returns ~0.032
*
* y = pdf( 1.0 );
* // returns ~0.159
*/
function factory( v ) {
	var exponent;
	var betaTerm;

	if ( isnan( v ) || v <= 0 ) {
		return nan;
	}
	betaTerm = sqrt( v ) * beta( v/2.0, 0.5 );
	exponent = ( 1.0 + v ) / 2.0;
	/**
	* Evaluates the probability density function (PDF) for a Student's t distribution.
	*
	* @private
	* @param {number} x - input value
	* @returns {number} evaluated PDF
	*
	* @example
	* var y = pdf( 2.3 );
	* // returns <number>
	*/
	return function pdf( x ) {
		if ( isnan( x ) ) {
			return NaN;
		}
		return pow( v / ( v + pow( x, 2.0 ) ), exponent ) / betaTerm;
	}; // end FUNCTION pdf()
} // end FUNCTION factory()


// EXPORTS //

module.exports = factory;

Improve code style