A math package for Laravel 4.
After installing and registering the service provider, you can use the math library by referencing the Math
facade:
// app/routes.php
Route::get('/', function()
{
// Calculate the absolute value of -1
$result = Math::abs(-1);
});
The math package provides a solve()
function through the Math
facade. This function can be used to solve equations or expressions entered by the user.
Example
// app/routes.php
Route::get('/', function()
{
// Create a new function f(x) = 2 + x
Math::solve('f(x) = 2 + x');
// Reference our previous function and pass in 23.
$result = Math::solve('f(23)');
// Result is equal to 25.
echo $result;
});
We can also use all of the general math functions that are listed below:
// app/routes.php
Route::get('/', function()
{
// Outputs 9.3326215443944E+157
echo Math::solve('abs(factorial(100))');
});
The math package currently provides the following functions from the ExecutionEngineInterface
and be accessed through the Math object aliased through the Math
facade.
abs($number)
- Returns the absolute value of a number.acos($number)
- Returns the arc cosine of a number.asin($number)
- Returns the arc sine of a number.atan($number)
- Returns the arc tangent of a number.atan2($x, $y)
- Calculates the arc tangent of two variables.ceiling($number)
- ceiling($number)cos($angle)
- Returns the cosine of the specified angle.cosh($angle)
- Returns the hyperbolic cosine of the angle.exp($number)
- Returns e raised to given power.floor($number)
- Returns the next lowest integer of a number.log($number, $base = M_E)
- Returns the logarithm of a number in a specified base.log10($number)
- Returns the base-10 logarithm of a number.max(array $numbers)
- Returns the highest value in the array of numbers.min(array $numbers)
- Returns the lowest value in the array of numbers.pow($base, $exponent)
- Returns a base number raised to an exponent.round($number, $precision = 0, $mode = PHP_ROUND_HALF_UP)
- Rounds a number to the nearest value.sign($number)
- Returns a value indicating the sign of a number.sin($angle)
- Returns the sine of the given angle.sinh($angle)
- Returns the hyperbolic sine of of the angle.sqrt($number)
- Returns the square root of a given number.tan($angle)
- Returns the tangent of a specified angle.tanh($angle)
- Returns the hyperbolic tangent of an angle.truncate($number)
- Returns the integral part of a given number.add($numberOne, $numberTwo)
- Returns the sum of two numbers.subtract($numberOne, $numberTwo
- Returns the difference of two numbers.multiply($numberOne, $numberTwo)
- Returns the product of two numbers.divide($numberOne, $numberTwo)
- Returns the quotient of two numbers.mod($numberOne, $numberTwo)
- Returns the remainder of two numbers.factorial($number)
- Calculates the factorial of a number.
The math package allows you to write your own driver that will change how it performs the actual math operations. For example, you could create a new driver using the functions in the BCMath
or the GMP
math extensions. Just create a new driver that implements the Flare\Math\ExecutionEngineInterface
contract.
There is a default driver that uses your systems default math operations: Flare\Math\Drivers\MathExecutionEngine
If you create a new driver, you may register it with the IoC like so:
class MyNewEngine implements \Flare\Math\ExecutionEngineInterface {
// You will have to implement quite a few methods.
}
// app/routes.php
App::bind('ExecutionEngineInterface', new MyNewEngine());
After this the math package will now use your driver implementation.
The math package defines a code contract Flare\Math\SolutionEngineInterface
. Your implementations of this will allow you to change the behavior of the Math::solve($expression)
function.
For example, you could write a driver that does API calls to WolframAplha to provide answers to expressions entered by the user.
There is a default implementation that can be found at Flare\Math\Drivers\EvalMathDriver
.