本文整理汇总了PHP中PHPExcel_Calculation_Statistical类的典型用法代码示例。如果您正苦于以下问题:PHP PHPExcel_Calculation_Statistical类的具体用法?PHP PHPExcel_Calculation_Statistical怎么用?PHP PHPExcel_Calculation_Statistical使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了PHPExcel_Calculation_Statistical类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: DVARP
/**
* DVARP
*
* Calculates the variance of a population based on the entire population by using the numbers
* in a column of a list or database that match conditions that you specify.
*
* Excel Function:
* DVARP(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return float
*
*/
public static function DVARP($database, $field, $criteria)
{
$field = self::__fieldExtract($database, $field);
if (is_null($field)) {
return NULL;
}
// reduce the database to a set of rows that match all the criteria
$database = self::__filter($database, $criteria);
// extract an array of values for the requested column
$colData = array();
foreach ($database as $row) {
$colData[] = $row[$field];
}
// Return
return PHPExcel_Calculation_Statistical::VARP($colData);
}
示例2: SUBTOTAL
/**
* SUBTOTAL
*
* Returns a subtotal in a list or database.
*
* @param int the number 1 to 11 that specifies which function to
* use in calculating subtotals within a list.
* @param array of mixed Data Series
* @return float
*/
public static function SUBTOTAL()
{
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
// Calculate
$subtotal = array_shift($aArgs);
if (is_numeric($subtotal) && !is_string($subtotal)) {
switch ($subtotal) {
case 1:
return PHPExcel_Calculation_Statistical::AVERAGE($aArgs);
break;
case 2:
return PHPExcel_Calculation_Statistical::COUNT($aArgs);
break;
case 3:
return PHPExcel_Calculation_Statistical::COUNTA($aArgs);
break;
case 4:
return PHPExcel_Calculation_Statistical::MAX($aArgs);
break;
case 5:
return PHPExcel_Calculation_Statistical::MIN($aArgs);
break;
case 6:
return self::PRODUCT($aArgs);
break;
case 7:
return PHPExcel_Calculation_Statistical::STDEV($aArgs);
break;
case 8:
return PHPExcel_Calculation_Statistical::STDEVP($aArgs);
break;
case 9:
return self::SUM($aArgs);
break;
case 10:
return PHPExcel_Calculation_Statistical::VARFunc($aArgs);
break;
case 11:
return PHPExcel_Calculation_Statistical::VARP($aArgs);
break;
}
}
return PHPExcel_Calculation_Functions::VALUE();
}
示例3: listar_oportunidades_por_puntaje
function listar_oportunidades_por_puntaje($fecha = array(), $dashboard = NULL)
{
$dataset = array();
$results = array();
$fields = array("opp.id_oportunidad", "opp.nombre", "HEX(opp.uuid_oportunidad) AS uuid_oportunidad", "HEX(cl.uuid_cliente) AS uuid_cliente", "HEX(opp.uuid_sociedad) AS uuid_sociedad", "HEX(opp.uuid_contacto) AS uuid_contacto", "ccat.etiqueta AS tipo_cliente", "cl.nombre AS nombre_cliente", "clso.nombre_comercial", "ocat.id_cat AS id_etapa", "ocat.etiqueta AS etapa", "opp.fecha_cierre", "opp.fecha_creacion", "prop.valor_alquiler", "CONCAT_WS(' ', IF(usr.nombre != '', usr.nombre, ''), IF(usr.apellido != '', usr.apellido, '')) AS usuario_asignado", "CONCAT_WS(' ', IF(con.nombre != '', con.nombre, ''), IF(con.apellido != '', con.apellido, '')) AS nombre_contacto");
/**
* Permiso Default: ver las asignadas o las que ha creado
*/
$clause = array("ocat.valor NOT IN('vendido','venta_perdida')" => NULL);
if (!empty($fecha)) {
$replace = Grafica_usuario::condicion_fecha($fecha);
$str = str_replace("fecha_creacion", "opp.fecha_creacion", $replace);
$clause[$str] = NULL;
} else {
$clause["MONTH(opp.fecha_creacion) = '" . date('n') . "'"] = NULL;
}
/**
* Array con los uuid de usuarios
* que el usario actual puede ver.
*/
if (empty($dashboard)) {
$ver_usuarios = @CRM_Controller::andrea_ACL();
} else {
$ver_usuarios = @CRM_Controller::andrea_ACL('dashboard');
}
$this->db->select($fields)->distinct()->from('opp_oportunidades AS opp')->join('cl_clientes AS cl', 'cl.uuid_cliente = opp.uuid_cliente', 'LEFT')->join('cl_cliente_sociedades_contactos AS clcon', 'clcon.uuid_cliente = cl.uuid_cliente', 'LEFT')->join('con_contactos AS con', 'con.uuid_contacto = clcon.uuid_contacto', 'LEFT')->join('opp_oportunidades_cat AS ocat', 'ocat.id_cat = opp.id_etapa_venta', 'LEFT')->join('usuarios AS usr', 'usr.uuid_usuario = opp.id_asignado', 'LEFT')->join('cl_clientes_cat AS ccat', 'ccat.id_cat = cl.id_tipo_cliente', 'LEFT')->join('rpo_propiedades AS prop', 'prop.uuid_propiedad = opp.uuid_propiedad', 'LEFT')->join('cl_clientes_sociedades AS clso', 'clso.uuid_sociedad = opp.uuid_sociedad', 'LEFT');
/**
* verificar array $ver_usuarios
*/
if (!empty($ver_usuarios["uuid_usuario"])) {
$usuarios = $ver_usuarios["uuid_usuario"];
$usuarios = !empty($usuarios) ? implode(", ", array_map(function ($usuarios) {
return "'" . $usuarios . "'";
}, $usuarios)) : "";
$clause["HEX(opp.id_asignado) IN(" . $usuarios . ")"] = NULL;
}
$this->db->where($clause);
$oportunidades = $this->db->group_by('opp.id_oportunidad', 'DESC')->get()->result_array();
if (!empty($oportunidades)) {
$i = 0;
foreach ($oportunidades as $oportunidad) {
$uuid_oportunidad = !empty($oportunidad["uuid_oportunidad"]) ? $oportunidad["uuid_oportunidad"] : "";
$results[$i]["id_oportunidad"] = !empty($oportunidad["id_oportunidad"]) ? $oportunidad["id_oportunidad"] : "";
$results[$i]["uuid_oportunidad"] = !empty($oportunidad["uuid_oportunidad"]) ? $oportunidad["uuid_oportunidad"] : "";
$results[$i]["nombre"] = !empty($oportunidad["nombre"]) ? $oportunidad["nombre"] : "";
$results[$i]["nombre_comercial"] = !empty($oportunidad["nombre_comercial"]) ? $oportunidad["nombre_comercial"] : "";
$results[$i]["tipo_cliente"] = !empty($oportunidad["tipo_cliente"]) ? $oportunidad["tipo_cliente"] : "";
$results[$i]["nombre_cliente"] = !empty($oportunidad["nombre_cliente"]) ? $oportunidad["nombre_cliente"] : "";
$results[$i]["fecha_creacion"] = !empty($oportunidad["fecha_creacion"]) ? $oportunidad["fecha_creacion"] : "";
//-------------------------
// Seleccionar la suma total
// de las actividades completadas
// de esta oportunidad.
//-------------------------
$fields = array("COALESCE(SUM(actta.puntaje), 0) AS puntaje_total");
$clause = array("actcat1.valor" => "oportunidades", "act.uuid_oportunidad = UNHEX('{$uuid_oportunidad}')" => NULL, "act.completada" => 1);
$actividad = $this->db->select($fields)->distinct()->from('act_actividades AS act')->join("act_actividades_cat AS actcat1", "actcat1.id_cat = act.relacionado_con", 'LEFT')->join("act_tipo_actividades AS actta", "actta.uuid_tipo_actividad = act.uuid_tipo_actividad", 'LEFT')->where($clause)->get()->result_array();
$results[$i]["puntaje_total"] = 0;
if (!empty($actividad[0]["puntaje_total"]) && $actividad[0]["puntaje_total"] > 0) {
$results[$i]["puntaje_total"] = !empty($actividad[0]["puntaje_total"]) ? (int) $actividad[0]["puntaje_total"] : 0;
$dataset[$i] = (int) $actividad[0]["puntaje_total"];
$i++;
} else {
unset($results[$i]);
unset($dataset[$i]);
}
}
//Si no tiene actividad retornar false
/*if(@Util::is_array_empty($hasActividades)){
return false;
}*/
/**
* Hack: para que la funcion PHPExcel_Calculation_Statistical::PERCENTRANK
* No envie el siguiente error, si el array $dataset contiene un solo valor:
*
* A PHP Error was encountered
* Severity: Warning
* Message: Division by zero
* Filename: Calculation/Statistical.php
*/
if (count($dataset) == 1) {
$dataset[] = 0;
}
//ordenar los puntajes
//de menor a mayor
ksort($dataset);
//Recorrer los resultados y calcular el PERCENTRANK
//Usando una clase de la libreria PHPEXcel y introducir
//el resultado en el array de $results
$j = 0;
$percentagerank = "";
foreach ($results as $result) {
/*if(empty($result) || empty($result["puntaje_total"]) && $result["puntaje_total"] == ""
|| empty($result["puntaje_total"]) && $result["puntaje_total"] <= 0
|| !empty($result["puntaje_total"]) && count($dataset) == 1 && $dataset[0] == $result["puntaje_total"]){
continue;
}*/
if (!empty($result["puntaje_total"]) && $result["puntaje_total"] != "" && $result["puntaje_total"] > 0) {
$percentagerank = PHPExcel_Calculation_Statistical::PERCENTRANK($dataset, $result["puntaje_total"], 2) * 100;
//$percentagerank = PHPExcel_Calculation_Statistical::PERCENTRANK($dataset, $result["puntaje_total"], 1);
//.........这里部分代码省略.........
示例4: listar_oportunidades_por_puntaje
public static function listar_oportunidades_por_puntaje($fecha = array(), $subordinados)
{
$dataset = array();
$results = array();
$replace = Grafica_usuario::condicion_fecha($fecha);
$fecha_clause = str_replace("fecha_creacion", "opp.fecha_creacion", $replace);
$uuid_subordinados = !empty($subordinados) ? implode(", ", array_map(function ($subordinados) {
return "'" . $subordinados . "'";
}, $subordinados)) : "";
$clause = " AND {$fecha_clause}";
if (!empty($uuid_subordinados)) {
$clause .= " AND HEX(opp.id_asignado) IN(" . $uuid_subordinados . ")";
}
$sql = "SELECT DISTINCT `opp`.`id_oportunidad`, `opp`.`nombre`, HEX(opp.uuid_oportunidad) AS uuid_oportunidad, HEX(cl.uuid_cliente) AS uuid_cliente, HEX(opp.uuid_sociedad) AS uuid_sociedad, HEX(opp.uuid_contacto) AS uuid_contacto,\n\t\t\t\t`ccat`.`etiqueta` AS tipo_cliente, `cl`.`nombre` AS nombre_cliente, `clso`.`nombre_comercial`, `ocat`.`id_cat` AS id_etapa, `ocat`.`etiqueta` AS etapa, `opp`.`fecha_cierre`, `opp`.`fecha_creacion`, `prop`.`valor_alquiler`,\n\t\t\t\tCONCAT_WS(' ', IF(usr.nombre != '', usr.nombre, ''), IF(usr.apellido != '', usr.apellido, '')) AS usuario_asignado,\n\t\t\t\tCONCAT_WS(' ', IF(con.nombre != '', con.nombre, ''), IF(con.apellido != '', con.apellido, '')) AS nombre_contacto\n\t\t\t\tFROM `opp_oportunidades` AS opp\n\t\t\t\tLEFT JOIN `cl_clientes` AS cl ON `cl`.`uuid_cliente` = `opp`.`uuid_cliente`\n\t\t\t\tLEFT JOIN `cl_cliente_sociedades_contactos` AS clcon ON `clcon`.`uuid_cliente` = `cl`.`uuid_cliente`\n\t\t\t\tLEFT JOIN `con_contactos` AS con ON `con`.`uuid_contacto` = `clcon`.`uuid_contacto`\n\t\t\t\tLEFT JOIN `opp_oportunidades_cat` AS ocat ON `ocat`.`id_cat` = `opp`.`id_etapa_venta`\n\t\t\t\tLEFT JOIN `usuarios` AS usr ON `usr`.`uuid_usuario` = `opp`.`id_asignado`\n\t\t\t\tLEFT JOIN `cl_clientes_cat` AS ccat ON `ccat`.`id_cat` = `cl`.`id_tipo_cliente`\n\t\t\t\tLEFT JOIN `rpo_propiedades` AS prop ON `prop`.`uuid_propiedad` = `opp`.`uuid_propiedad`\n\t\t\t\tLEFT JOIN `cl_clientes_sociedades` AS clso ON `clso`.`uuid_sociedad` = `opp`.`uuid_sociedad`\n\t\t\t\tWHERE `ocat`.`valor` NOT IN('vendido','venta_perdida') {$clause}\n\t\t\t\tGROUP BY `opp`.`id_oportunidad`";
self::$db->sql($sql);
$oportunidades = self::$db->getResult();
if (!empty($oportunidades)) {
$i = 0;
foreach ($oportunidades as $oportunidad) {
$uuid_oportunidad = !empty($oportunidad["uuid_oportunidad"]) ? $oportunidad["uuid_oportunidad"] : "";
$results[$i]["id_oportunidad"] = !empty($oportunidad["id_oportunidad"]) ? $oportunidad["id_oportunidad"] : "";
$results[$i]["uuid_oportunidad"] = !empty($oportunidad["uuid_oportunidad"]) ? $oportunidad["uuid_oportunidad"] : "";
$results[$i]["nombre"] = !empty($oportunidad["nombre"]) ? $oportunidad["nombre"] : "";
$results[$i]["nombre_comercial"] = !empty($oportunidad["nombre_comercial"]) ? $oportunidad["nombre_comercial"] : "";
$results[$i]["tipo_cliente"] = !empty($oportunidad["tipo_cliente"]) ? $oportunidad["tipo_cliente"] : "";
$results[$i]["nombre_cliente"] = !empty($oportunidad["nombre_cliente"]) ? $oportunidad["nombre_cliente"] : "";
$results[$i]["fecha_creacion"] = !empty($oportunidad["fecha_creacion"]) ? $oportunidad["fecha_creacion"] : "";
$results[$i]["usuario_asignado"] = !empty($oportunidad["usuario_asignado"]) ? $oportunidad["usuario_asignado"] : "";
$actividad = array();
if (!empty($oportunidad["uuid_oportunidad"])) {
$sql = "SELECT DISTINCT COALESCE(SUM(actta.puntaje), 0) AS puntaje_total\n\t\t\t\t\t\t\tFROM (`act_actividades` AS act)\n\t\t\t\t\t\t\tLEFT JOIN `act_actividades_cat` AS actcat1 ON `actcat1`.`id_cat` = `act`.`relacionado_con`\n\t\t\t\t\t\t\tLEFT JOIN `act_tipo_actividades` AS actta ON `actta`.`uuid_tipo_actividad` = `act`.`uuid_tipo_actividad`\n\t\t\t\t\t\t\tWHERE `actcat1`.`valor` = 'oportunidades'\n\t\t\t\t\t\t\tAND `act`.`uuid_oportunidad` = UNHEX('" . $oportunidad["uuid_oportunidad"] . "')\n\t\t\t\t\t\t\tAND `act`.`completada` = 1";
self::$db->sql($sql);
$actividad = self::$db->getResult();
}
$results[$i]["puntaje_total"] = 0;
if (!empty($actividad[0]["puntaje_total"]) && $actividad[0]["puntaje_total"] > 0) {
$results[$i]["puntaje_total"] = !empty($actividad[0]["puntaje_total"]) ? (int) $actividad[0]["puntaje_total"] : 0;
$dataset[$i] = (int) $actividad[0]["puntaje_total"];
$i++;
} else {
unset($results[$i]);
unset($dataset[$i]);
}
}
/**
* Hack: para que la funcion PHPExcel_Calculation_Statistical::PERCENTRANK
* No envie el siguiente error, si el array $dataset contiene un solo valor:
*
* A PHP Error was encountered
* Severity: Warning
* Message: Division by zero
* Filename: Calculation/Statistical.php
*/
if (count($dataset) == 1) {
$dataset[] = 0;
}
//ordenar los puntajes
//de menor a mayor
ksort($dataset);
//Recorrer los resultados y calcular el PERCENTRANK
//Usando una clase de la libreria PHPEXcel y introducir
//el resultado en el array de $results
$j = 0;
$percentagerank = "";
foreach ($results as $result) {
if (!empty($result["puntaje_total"]) && $result["puntaje_total"] != "" && $result["puntaje_total"] > 0) {
$percentagerank = PHPExcel_Calculation_Statistical::PERCENTRANK($dataset, $result["puntaje_total"], 2) * 100;
$results[$j]["percentagerank"] = !empty($percentagerank) ? $percentagerank : 0;
} else {
unset($result);
}
$j++;
}
}
return $results;
}
示例5: DVARP
/**
* DVARP
*
* Calculates the variance of a population based on the entire population by using the numbers
* in a column of a list or database that match conditions that you specify.
*
* Excel Function:
* DVARP(database,field,criteria)
*
* @access public
* @category Database Functions
* @param mixed[] $database The range of cells that makes up the list or database.
* A database is a list of related data in which rows of related
* information are records, and columns of data are fields. The
* first row of the list contains labels for each column.
* @param string|integer $field Indicates which column is used in the function. Enter the
* column label enclosed between double quotation marks, such as
* "Age" or "Yield," or a number (without quotation marks) that
* represents the position of the column within the list: 1 for
* the first column, 2 for the second column, and so on.
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
* You can use any range for the criteria argument, as long as it
* includes at least one column label and at least one cell below
* the column label in which you specify a condition for the
* column.
* @return float
*
*/
public static function DVARP($database, $field, $criteria)
{
$field = self::fieldExtract($database, $field);
if (is_null($field)) {
return null;
}
// Return
return PHPExcel_Calculation_Statistical::VARP(self::getFilteredColumn($database, $field, $criteria));
}
示例6: CalcAllStats1
//.........这里部分代码省略.........
$countGoodDays++;
}
if ($r < 1) {
//threshold = 0
$sumBenchMinusTargetOnBadDays += $returnBenchmark[$returnCount] - $r;
$sumBenchMinusTargetSquaredOnBadDays += pow($returnBenchmark[$returnCount] - $r, 2);
}
if ($r > $returnMax) {
$returnMax = $r;
}
if ($r < $returnMin) {
$returnMin = $r;
}
$returnCount++;
}
if ($returnCount > 1) {
// calculate some figures
$returnTargetCumulative -= 1.0;
$returnBenchCumulative -= 1.0;
$averageTarget = $sumTarget / $returnCount;
$averageBench = $sumBench / $returnCount;
$averageTargetMinusBench = $sumTargetMinusBench / $returnCount;
$averageBenchMinusTargetOnBadDays = $sumBenchMinusTargetOnBadDays / $returnCount;
$averageBenchMinusTargetSquaredOnBadDays = $sumBenchMinusTargetSquaredOnBadDays / $returnCount;
$covarTargetBench = ($sumTargetTimesBench - $sumTarget * $sumBench / $returnCount) / ($returnCount - 1);
// second loop
$i = 0;
foreach ($returnTarget as $r) {
$varianceTarget += pow($r - $averageTarget, 2);
$varianceBench += pow($r - $averageBench, 2);
$varianceTargetMinusBench += pow($r - $averageBench - $averageTargetMinusBench, 2);
$i++;
}
// calculate the output
$varianceTarget /= $returnCount - 1;
$varianceBench /= $returnCount - 1;
$varianceTargetMinusBench /= $returnCount - 1;
$volTarget = sqrt($varianceTarget) * sqrt(240);
$volBench = sqrt($varianceBench) * sqrt(240);
$volTargetMinusBench = sqrt($varianceTargetMinusBench) * sqrt(240);
if ($varianceBench == 0) {
$beta = 0;
} else {
$beta = $covarTargetBench / $varianceBench;
}
if ($volTarget > 0) {
$sharpe = $returnTargetCumulative / $volTarget;
} else {
$sharpe = 0;
}
$alpha = $averageTarget - $beta * $averageBench;
if ($beta == 0) {
$treynor = 0;
} else {
$treynor = $returnTargetCumulative / $beta;
}
$trackingError = $volTargetMinusBench;
if ($volTargetMinusBench > 0) {
$infoQuota = ($returnTargetCumulative - $returnBenchCumulative) / $volTargetMinusBench;
} else {
$infoQuota = 0;
}
$consistency = $countGoodDays / $returnCount;
$x = pow(($returnCount * $sumTargetSquared - pow($sumTarget, 2)) * ($returnCount * $sumBenchSquared - pow($sumBench, 2)), 1 / 2);
//$x = pow(($returnCount*$sumTargetTimesBench-$sumTarget*$sumBench)/pow(($returnCount*$sumTargetSquared-pow($sumTarget,2))*($returnCount*$sumBenchSquared-pow($sumBench,2)),1/2),2);
if ($x > 0) {
$R2 = pow(($returnCount * $sumTargetTimesBench - $sumTarget * $sumBench) / $x, 2);
} else {
$R2 = 0;
}
if ($averageBenchMinusTargetOnBadDays == 0) {
$omega = 0;
$sortino = 0;
// "Div/Null!";
} else {
$omega = 1 + $averageTargetMinusBench / $averageBenchMinusTargetOnBadDays;
$sortino = $averageTargetMinusBench / pow($averageBenchMinusTargetOnBadDays, 1 / 2);
}
$VaR = $averageTargetMinusBench + $volTarget * PHPExcel_Calculation_Statistical::NORMSINV(0.01);
//$VaR=$averageTargetMinusBench+$volTarget*$this->inverse_ncdf(0.01);
} else {
$volTarget = 0;
$sharpe = 0;
$beta = 0;
$treynor = 0;
$trackingError = 0;
$infoQuota = 0;
$consistency = 0;
$R2 = 0;
$VaR = 0;
$averageTarget = 1;
$returnMax = 1;
$returnMin = 1;
$sortino = 0;
$omega = 0;
$averageTargetMinusBench = 0;
$averageBenchMinusTargetOnBadDays = 0;
}
return array($volTarget, $sharpe, $alpha, $beta, $treynor, $trackingError, $infoQuota, $consistency, $R2, $VaR, $averageTarget - 1, $returnMax - 1, $returnMin - 1, $sortino, $omega, $averageTargetMinusBench, $averageBenchMinusTargetOnBadDays);
}
示例7: _logGamma
private static function _logGamma($x)
{
// Log Gamma related constants
static $lg_d1 = -0.5772156649015329;
static $lg_d2 = 0.42278433509846713;
static $lg_d4 = 1.791759469228055;
static $lg_p1 = array(4.945235359296727, 201.8112620856775, 2290.8383738313464, 11319.672059033808, 28557.246356716354, 38484.962284437934, 26377.487876241954, 7225.813979700288);
static $lg_p2 = array(4.974607845568932, 542.4138599891071, 15506.93864978365, 184793.29044456323, 1088204.7694688288, 3338152.96798703, 5106661.678927353, 3074109.0548505397);
static $lg_p4 = array(14745.0216605994, 2426813.3694867045, 121475557.40450932, 2663432449.630977, 29403789566.34554, 170266573776.5399, 492612579337.7431, 560625185622.3951);
static $lg_q1 = array(67.48212550303778, 1113.3323938571993, 7738.757056935398, 27639.870744033407, 54993.102062261576, 61611.22180066002, 36351.2759150194, 8785.536302431014);
static $lg_q2 = array(183.03283993705926, 7765.049321445006, 133190.38279660742, 1136705.8213219696, 5267964.117437947, 13467014.543111017, 17827365.303532742, 9533095.591844354);
static $lg_q4 = array(2690.5301758708993, 639388.5654300093, 41355999.30241388, 1120872109.616148, 14886137286.788137, 101680358627.24382, 341747634550.73773, 446315818741.9713);
static $lg_c = array(-0.001910444077728, 0.0008417138778129501, -0.0005952379913043012, 0.0007936507935003503, -0.0027777777777776816, 0.08333333333333333, 0.0057083835261);
// Rough estimate of the fourth root of logGamma_xBig
static $lg_frtbig = 2.25E+76;
static $pnt68 = 0.6796875;
if ($x == self::$_logGammaCache_x) {
return self::$_logGammaCache_result;
}
$y = $x;
if ($y > 0.0 && $y <= LOG_GAMMA_X_MAX_VALUE) {
if ($y <= EPS) {
$res = -log(y);
} elseif ($y <= 1.5) {
// ---------------------
// EPS .LT. X .LE. 1.5
// ---------------------
if ($y < $pnt68) {
$corr = -log($y);
$xm1 = $y;
} else {
$corr = 0.0;
$xm1 = $y - 1.0;
}
if ($y <= 0.5 || $y >= $pnt68) {
$xden = 1.0;
$xnum = 0.0;
for ($i = 0; $i < 8; ++$i) {
$xnum = $xnum * $xm1 + $lg_p1[$i];
$xden = $xden * $xm1 + $lg_q1[$i];
}
$res = $corr + $xm1 * ($lg_d1 + $xm1 * ($xnum / $xden));
} else {
$xm2 = $y - 1.0;
$xden = 1.0;
$xnum = 0.0;
for ($i = 0; $i < 8; ++$i) {
$xnum = $xnum * $xm2 + $lg_p2[$i];
$xden = $xden * $xm2 + $lg_q2[$i];
}
$res = $corr + $xm2 * ($lg_d2 + $xm2 * ($xnum / $xden));
}
} elseif ($y <= 4.0) {
// ---------------------
// 1.5 .LT. X .LE. 4.0
// ---------------------
$xm2 = $y - 2.0;
$xden = 1.0;
$xnum = 0.0;
for ($i = 0; $i < 8; ++$i) {
$xnum = $xnum * $xm2 + $lg_p2[$i];
$xden = $xden * $xm2 + $lg_q2[$i];
}
$res = $xm2 * ($lg_d2 + $xm2 * ($xnum / $xden));
} elseif ($y <= 12.0) {
// ----------------------
// 4.0 .LT. X .LE. 12.0
// ----------------------
$xm4 = $y - 4.0;
$xden = -1.0;
$xnum = 0.0;
for ($i = 0; $i < 8; ++$i) {
$xnum = $xnum * $xm4 + $lg_p4[$i];
$xden = $xden * $xm4 + $lg_q4[$i];
}
$res = $lg_d4 + $xm4 * ($xnum / $xden);
} else {
// ---------------------------------
// Evaluate for argument .GE. 12.0
// ---------------------------------
$res = 0.0;
if ($y <= $lg_frtbig) {
$res = $lg_c[6];
$ysq = $y * $y;
for ($i = 0; $i < 6; ++$i) {
$res = $res / $ysq + $lg_c[$i];
}
}
$res /= $y;
$corr = log($y);
$res = $res + log(SQRT2PI) - 0.5 * $corr;
$res += $y * ($corr - 1.0);
}
} else {
// --------------------------
// Return for bad arguments
// --------------------------
$res = MAX_VALUE;
}
// ------------------------------
//.........这里部分代码省略.........