Link to home
Start Free TrialLog in
Avatar of wpm0001
wpm0001Flag for United States of America

asked on

VS2005 - C# - Math?

I have a C# Windows app that performs calculations based on equation patterns.  Currently I'm leveraging MS SQL Server's built in abilities to perform the actual calculations.  Here are some of the equation patterns that are being sent to the database:

(A * (B - C)) + (D * (E - F))
(A * B) + (A * C)
(A * B) + (A * C) + (D * E)
(A * B) + (A * C) + (D * E) + (D * F)
(A * B) + (C * (D - E))
(A * B) + (C * D)
(A*B) - C
(A-B) * C
(CEILING((A - B)/C) * D)
(CEILING(A - B)/C) * D
(CEILING(A/B) * C) + (A * D)
(CEILING(A/B) * C) + (A * D) + (CEILING(E/F) * G)
(CEILING(A/B) * C) + (CEILING(A/D) * E)
(CEILING(A/B) * C) + (CEILING(D/E) * F)
(CEILING(A/B) * C) + (D * E)
A
A * (B - C)
A * B
A + (((B - C)/D) * E)
A + (B * (C - D))
A + (B * C)
CEILING((A - B)/C) * D
CEILING(A/B) * C

The values for the elements ('A', 'B', 'C' etc) are values determined by input from the user and/or static values stored in the database and all have a potential for four significant digits (I stated that poorly but you know what I mean right?).  

I'm wondering if there is an open source or near free .net library out there somewhere that can execute full equations like these without major modifications.

The app works great and may move to aspx soon so maybe it's best to keep using SQL Server's math abilities?  What do you folks think?
Avatar of imitchie
imitchie
Flag of New Zealand image

C# should be able to handle all those calculations natively, or am I missing something? can you elaborate?
Avatar of RedKelvin
RedKelvin

I don't think this does everything you want, but still of interest
http://www.codeproject.com/dotnet/complex_math.asp
Avatar of wpm0001

ASKER

imitchie,

I would like to send an entire equation to "something" and have it evaluate the expression without needing to do anything else.  

For the pattern:
(A * B) + (A * C) + (D * E) + (D * F)

SQL Server Accepts:
(5.0000 * 6.0000) + (5.0000 * 0.0125) + (3.0000 * 4.3180) + (3.0000 * 7.0000)

And will return the appropriate value.  SQL Server will accept any valid mathematical statement and return the calculated value.  If C# can do this then I've missed it!  I really hope that I've missed it because it would be awesome!!!

BTW - these equation patterns (that is what I'm call'in them) are stored in a database and the pattern is not known until run-time.  The app picks out the elements that can be entered, etc.

I might not have answered your question.  I tend to be a little wordy sometimes...
how about:

http://www.codeproject.com/useritems/Run-Time_Code_Generation1.asp

paste the entire calculation as c# code, compile and run it
actually, this one is easier, and straight from the horse's mouth
http://support.microsoft.com/kb/304655
that was incomplete, you need this also
http://www.aspcode.net/ProcessStart-and-redirect-standard-output.aspx

so your compiled exe has

void main...
 writeline ... (string) (5.0000 * 6.0000) + (5.0000 * 0.0125) + (3.0000 * 4.3180) + (3.0000 * 7.0000) )

and your original app receives the result in

string sRes = oReader2.ReadToEnd();

and casts as double
Avatar of wpm0001

ASKER

RedKelvin

Holy Cow - way above my head!  Interesting though.  

Thanks!
Avatar of wpm0001

ASKER

imitchie?

If the values changed - then what?  

I must be missing something...  (A * B) + (A * C) + (D * E) + (D * F)

In a situation where A, B, C, D, E, and/or F can have different values based on the input from the user how do your posts apply?

You have me confused now.  
It's really pretty simple to do. Just convert it to Reverse Polish Notation and run it through a simple stack processor. Send in the values for the variables along with the equations.

Jim
ASKER CERTIFIED SOLUTION
Avatar of imitchie
imitchie
Flag of New Zealand image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial