ILIAS  Release_4_2_x_branch Revision 61807
 All Data Structures Namespaces Files Functions Variables Groups Pages
ilMath Class Reference

Class ilMath. More...

+ Collaboration diagram for ilMath:

Public Member Functions

 exp2dec ($float_str)

Static Public Member Functions

static _add ($left_operand, $right_operand, $scale=50)
static _comp ($left_operand, $right_operand, $scale=50)
static _div ($left_operand, $right_operand, $scale=50)
static _mod ($left_operand, $modulus)
static _mul ($left_operand, $right_operand, $scale=50)
static _pow ($left_operand, $right_operand, $scale=50)
static _sqrt ($operand, $scale=50)
static _sub ($left_operand, $right_operand, $scale=50)

Detailed Description

Class ilMath.

Wrapper for mathematical operations

Author
Helmut Schottmüller helmu.nosp@m.t.sc.nosp@m.hottm.nosp@m.uell.nosp@m.er@ma.nosp@m.c.co.nosp@m.m
Id:
class.ilMath.php 41921 2013-04-30 10:11:14Z bheyser

Definition at line 32 of file class.ilMath.php.

Member Function Documentation

static ilMath::_add (   $left_operand,
  $right_operand,
  $scale = 50 
)
static

Definition at line 37 of file class.ilMath.php.

References $res, and exp2dec().

Referenced by EvalMath\pfx().

{
if (function_exists("bcadd"))
{
return bcadd(ilMath::exp2dec($left_operand), ilMath::exp2dec($right_operand), $scale);
}
else
{
$res = $left_operand + $right_operand;
if (is_numeric($scale)) $res = round($res, $scale);
return $res;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static ilMath::_comp (   $left_operand,
  $right_operand,
  $scale = 50 
)
static

Definition at line 54 of file class.ilMath.php.

References exp2dec().

{
if (function_exists("bccomp"))
{
return bccomp(ilMath::exp2dec($left_operand), ilMath::exp2dec($right_operand), $scale);
}
else
{
if (is_numeric($scale))
{
$left_operand = round($left_operand, $scale);
$right_operand = round($right_operand, $scale);
}
if ($left_operand == $right_operand) return 0;
if ($left_operand > $right_operand) return 1;
return -1;
}
}

+ Here is the call graph for this function:

static ilMath::_div (   $left_operand,
  $right_operand,
  $scale = 50 
)
static

Definition at line 76 of file class.ilMath.php.

References $res, and exp2dec().

Referenced by EvalMath\pfx().

{
if (function_exists("bcdiv"))
{
return bcdiv(ilMath::exp2dec($left_operand), ilMath::exp2dec($right_operand), $scale);
}
else
{
if ($right_operand == 0) return NULL;
$res = $left_operand / $right_operand;
if (is_numeric($scale)) $res = round($res, $scale);
return $res;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static ilMath::_mod (   $left_operand,
  $modulus 
)
static

Definition at line 94 of file class.ilMath.php.

References exp2dec().

{
if (function_exists("bcmod"))
{
return bcmod(ilMath::exp2dec($left_operand), $modulus);
}
else
{
return $left_operand % $right_operand;
}
}

+ Here is the call graph for this function:

static ilMath::_mul (   $left_operand,
  $right_operand,
  $scale = 50 
)
static

Definition at line 109 of file class.ilMath.php.

References $res, and exp2dec().

Referenced by EvalMath\pfx().

{
if (function_exists("bcmul"))
{
return bcmul(ilMath::exp2dec($left_operand), ilMath::exp2dec($right_operand), $scale);
}
else
{
$res = $left_operand * $right_operand;
if (is_numeric($scale)) $res = round($res, $scale);
return $res;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static ilMath::_pow (   $left_operand,
  $right_operand,
  $scale = 50 
)
static

Definition at line 126 of file class.ilMath.php.

References $res, and exp2dec().

Referenced by EvalMath\pfx().

{
if (function_exists("bcpow"))
{
return bcpow(ilMath::exp2dec($left_operand), ilMath::exp2dec($right_operand), $scale);
}
else
{
$res = pow($left_operand, $right_operand);
if (is_numeric($scale)) $res = round($res, $scale);
return $res;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static ilMath::_sqrt (   $operand,
  $scale = 50 
)
static

Definition at line 143 of file class.ilMath.php.

References $res, and exp2dec().

{
if (function_exists("bcsqrt"))
{
return bcsqrt(ilMath::exp2dec($operand), $scale);
}
else
{
$res = sqrt($operand);
if (is_numeric($scale)) $res = round($res, $scale);
return $res;
}
}

+ Here is the call graph for this function:

static ilMath::_sub (   $left_operand,
  $right_operand,
  $scale = 50 
)
static

Definition at line 160 of file class.ilMath.php.

References $res, and exp2dec().

Referenced by EvalMath\pfx().

{
if (function_exists("bcsub"))
{
return bcsub(ilMath::exp2dec($left_operand), ilMath::exp2dec($right_operand), $scale);
}
else
{
$res = $left_operand - $right_operand;
if (is_numeric($scale)) $res = round($res, $scale);
return $res;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilMath::exp2dec (   $float_str)

Definition at line 178 of file class.ilMath.php.

Referenced by _add(), _comp(), _div(), _mod(), _mul(), _pow(), _sqrt(), and _sub().

{
// make sure its a standard php float string (i.e. change 0.2e+2 to 20)
// php will automatically format floats decimally if they are within a certain range
$original = $float_str; // store original float, so we can return a float keeping the pecision when possible
$float_str = (string)((float)($float_str));
$float_str = str_replace(",", ".", $float_str); // convert ',' to '.' (float casting was locale sensitive)
// if there is an E in the float string
if(($pos = strpos(strtolower($float_str), 'e')) !== false)
{
// get either side of the E, e.g. 1.6E+6 => exp E+6, num 1.6
$exp = substr($float_str, $pos+1);
$num = substr($float_str, 0, $pos);
// strip off num sign, if there is one, and leave it off if its + (not required)
if((($num_sign = $num[0]) === '+') || ($num_sign === '-')) $num = substr($num, 1);
else $num_sign = '';
if($num_sign === '+') $num_sign = '';
// strip off exponential sign ('+' or '-' as in 'E+6') if there is one, otherwise throw error, e.g. E+6 => '+'
if((($exp_sign = $exp[0]) === '+') || ($exp_sign === '-')) $exp = substr($exp, 1);
else trigger_error("Could not convert exponential notation to decimal notation: invalid float string '$float_str'", E_USER_ERROR);
// get the number of decimal places to the right of the decimal point (or 0 if there is no dec point), e.g., 1.6 => 1
$right_dec_places = (($dec_pos = strpos($num, '.')) === false) ? 0 : strlen(substr($num, $dec_pos+1));
// get the number of decimal places to the left of the decimal point (or the length of the entire num if there is no dec point), e.g. 1.6 => 1
$left_dec_places = ($dec_pos === false) ? strlen($num) : strlen(substr($num, 0, $dec_pos));
// work out number of zeros from exp, exp sign and dec places, e.g. exp 6, exp sign +, dec places 1 => num zeros 5
if($exp_sign === '+') $num_zeros = $exp - $right_dec_places;
else $num_zeros = $exp - $left_dec_places;
// build a string with $num_zeros zeros, e.g. '0' 5 times => '00000'
$zeros = str_pad('', $num_zeros, '0');
// strip decimal from num, e.g. 1.6 => 16
if($dec_pos !== false) $num = str_replace('.', '', $num);
// if positive exponent, return like 1600000
if($exp_sign === '+') return $num_sign.$num.$zeros;
// if negative exponent, return like 0.0000016
else return $num_sign.'0.'.$zeros.$num;
}
// otherwise, assume already in decimal notation and return
else return $original;
}

+ Here is the caller graph for this function:


The documentation for this class was generated from the following file: