Skip to content

mikebaldry/math_engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MathEngine

MathEngine is a lightweight mathematical expression parser and evaluator. It currently handles addition, subtraction, multiplication, division, exponent, modulus and the use of variables and pre-defined functions.

Install with

gem install math_engine

The only dependency is lexr, which is really lightweight and has no external dependencies.

An example: Expressions

require 'rubygems'
require 'math_engine'

engine = MathEngine.new

puts "#{engine.evaluate("x = 10 * (3 * 2) + (55 - 5) / (2.5 * (3 + 1))")}"
puts "#{engine.evaluate("x + 5")}"

results in an output of

65.0
70.0

extending is easy using functions, you can add single functions using MathEngine.define

engine.context.define :add_em do |x, y|
	x + y
end

or you can write all your functions in a class and add the class

class SomeFunctions
	def add_em(x, y)
		x + y
	end
end

engine.context.include_library SomeFunctions.new

and calling them with

engine.evaluate("1 + 1 + add_em(2, 2)")

All functions are pulled in from the built in Math class by default, so all the standard ruby math functions are available (cos, sin, tan etc)

if you missed a closing parenthesis, had an operator where it wasn't meant to be, you might get something like this:

Unexpected multiplication(*), expected: number, variable name or open_parenthesis

and that is pretty much every feature so far. Please let me know of any bugs or additions that you'd like to see!

Contributors

Mario de la Ossa (mdelaossa): Handling of complex numbers and upgraded to work with 1.9.X

License

See the LICENSE file included with the distribution for licensing and copyright details.

About

A lightweight math expression evaluator

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages