Click here to Skip to main content
Click here to Skip to main content

Math Parser

, 25 Aug 2005
Rate this:
Please Sign up or sign in to vote.
Solve mathematical equations

Introduction

This is a parser which uses RegEx to solve mathematical expressions.

How To Use It?

MathParser.Parser p = new MathParser.Parser();
if( p.Evaluate( "-(5-10)^(-1)(3+2(cos(3Pi)+(2+ln(exp(1)))^3))" ) ) 
    Console.WriteLine( p.Result );
else Console.WriteLine( "Error." );

Features

  • Functions
    • abs
    • acos
    • asin
    • atan
    • cos
    • cosh
    • floor
    • ln
    • log
    • sign
    • sin
    • sinh
    • sqrt
    • tan
    • tanh
  • Operators: +, -, *, , ^, !
  • Constants: Pi

Choose between RAD, DEG and GRAD.

p.Mode = MathParser.Mode.RAD;
p.Mode = MathParser.Mode.DEG;
p.Mode = MathParser.Mode.GRAD;

Or:

Parser p = new Parser( MathParser.Mode.DEG );

2(1+3(1e3+1)) = 2*(1+3*(1000+1)) = 2*(1+3(1000+1)) = 2(1+3*(10^3+1)) = 6008

2(1+4(5Pi+2,2e3)(5+2)^3) is the same as 2*(1+4*(5*Pi+2200)*(5+2)^3).

Known Problems

I tested this parser on a German operating system (WinXP).
If I want to convert a string to double (e.g. "3.123") the decimal point must be a "," (Convert.ToDouble("3.123") would throw an Exception).
I'm not sure if this works on an English version of WinXP.

If there are any problems with the decimal point, just report it and I will fix it.

Bug Fixes

  • Fixed some problems with exponents

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Paratrooper666

Germany Germany
No Biography provided

Comments and Discussions

 
QuestionHow to add % Pinmembererror_5057-Sep-13 23:27 
Question++ | +- | -- | -+ can occur Pinmembermirtes_992-Jun-13 4:03 
GeneralClaro y sencillo PinmemberMember 42650077-Sep-12 11:20 
QuestionSolution General, thanks for it! PinmemberMember 773069628-Sep-11 14:13 
QuestionRe: Problem with expression PinmemberMember 77306968-Sep-11 17:36 
GeneralMy vote of 1 Pinmembersepehr101417-Jul-11 5:05 
QuestionMultiplying by 0.6 PinmemberMember 427553922-Jul-10 12:22 
General2*8,7-(24,8+1500*0,8*0,00004-0,04*25-2*LOG(150*25)) Pinmemberfdepijper@ziggo.nl8-Jul-10 19:27 
GeneralRe: 2*8,7-(24,8+1500*0,8*0,00004-0,04*25-2*LOG(150*25)) PinmemberBiedermannS14-Mar-13 21:26 
GeneralIgnoring comma when called by SQL Assembly PinmemberLeo Kruz25-Nov-09 2:59 
GeneralThe Parser does not respect presedence Pinmemberher´minator4-Mar-09 20:20 
General(exp(2)) not working PinmemberTominatorBelgium3-Mar-09 6:59 
Generalcos(8) Pinmemberbey0nd8511-Jan-09 23:08 
Question10*20+5*10 - No Result ? PinmemberVictor Vanchesa15-Nov-07 11:42 
Generalgift:binary/hexadecimal and a bug... PinmemberMETRAWARE5-Nov-07 6:45 
Hi all,
 
1/ A simple way to add binary and hexadecimal support:....(see below)
2/ A bug with acos following cos (or asin following sin ...)
 
1/ Code to add hex/bin support (0xsomething and 0bsomething)

Regex regEx = new Regex("0[xX][A-Fa-f0-9]+", RegexOptions.IgnoreCase);
Match h = regEx.Match(Expression);
while (h.Success)
{
Expression = Expression.Replace(h.Value, Convert.ToInt32(h.Value.Substring(2), 16).ToString());
h = regEx.Match(Expression);
}


regEx = new Regex("0[bB][0-1]+", RegexOptions.IgnoreCase);
h = regEx.Match(Expression);
while (h.Success)
{
Expression = Expression.Replace(h.Value, Convert.ToInt32(h.Value.Substring(2), 2).ToString());
h = regEx.Match(Expression);
}

 
2/ acos bug
If you've got an expression like
cos(0.1) + acos(0.2)
Regexp that replace first cos will also replace second one and expression become
0.9950041653 + a0.99500416530.2 Dead | X|
 
Best regards
pierre
GeneralRe: gift:binary/hexadecimal and a bug... Pinmembererror_50528-Aug-13 3:25 
GeneralProblem with expression PinmemberAvrin174-Oct-07 0:12 
GeneralRe: Problem with expression PinmemberMember 773069617-Aug-11 16:24 
Questionln(exp(1)) evaluating correctly for you? PinmemberBreakableC21-Sep-07 1:13 
GeneralACOS, ASIN , ATAN error Pinmemberroksy30-Aug-07 22:53 
QuestionMathieuMathParser add to refrence list. Pinmemberjad_jabi1-Aug-07 1:10 
QuestionProblem with EMT64/AMD64 Extensions? PinmemberDocEvil796-Nov-06 7:51 
AnswerRe: Problem with EMT64/AMD64 Extensions? Pinmemberfdafdafdsa16-Nov-06 15:37 
AnswerRe: Problem with EMT64/AMD64 Extensions? PinmemberXynratron15-Mar-07 2:53 
QuestionError In Program Pinmembersis138212-Sep-06 8:41 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web03 | 2.8.140721.1 | Last Updated 25 Aug 2005
Article Copyright 2005 by Paratrooper666
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid