The class presented in this article implements a rational value type with basic mathematical functionality.
Using the code
This class has no public constructors.
Implicit casting to/from
Int64 (and therefore other integer types) and decimal (and therefore
double) is supported.
PIEBALD.Types.Rational a = 1 ;
PIEBALD.Types.Rational b = 2.3 ;
PIEBALD.Types.Rational c = 4.5M ;
Conversion from decimal can be controlled by the
static property. Currently, the
DecimalConversionMethod enumeration defines two values:
Decimal simply uses a power of ten as the denominator.
BestGuess tries (with some success) to determine what numbers can be divided to produce the value.
PIEBALD.Types.Rational d = 1M / 3M ;
PIEBALD.Types.Rational e = 1M / 3M ;
Strings containing expressions can be assigned with the
PIEBALD.Types.Rational f =
PIEBALD.Types.Rational.ParseInfix ( "1/2" ) ;
PIEBALD.Types.Rational g =
PIEBALD.Types.Rational.ParseInfix ( "(1/2) / (3/4)" ) ;
PIEBALD.Types.Rational h =
PIEBALD.Types.Rational.ParseRpn ( "1 2 /" ) ;
PIEBALD.Lib.LibRpn class for information on how infix is transformed to RPN.
The mathematical operators (+, -, *, /, %, ^ (exponentiation)) are supported. There are other static and instance properties as well.
- First posted - 2006/01/16.
BSCS 1992 Wentworth Institute of Technology
Originally from the Boston (MA) area. Lived in SoCal for a while. Now in the Phoenix (AZ) area.
OpenVMS enthusiast, ISO 8601 evangelist, photographer, opinionated SOB
"If you need help knowing what to think, let me know and I'll tell you." -- Jeffrey Snover [MSFT]
"Typing is no substitute for thinking." -- R.W. Hamming
"I find it appalling that you can become a programmer with less training than it takes to become a plumber." -- Bjarne Stroustrup
ZagNut’s Law: Arrogance is inversely proportional to ability.
"Well blow me sideways with a plastic marionette. I've just learned something new - and if I could award you a 100 for that post I would. Way to go you keyboard lovegod you." -- Pete O'Hanlon
"linq'ish" sounds like "inept" in German -- Andreas Gieriet
"Things would be different if I ran the zoo." -- Dr. Seuss
"Wrong is evil, and it must be defeated." – Jeff Ello
"A good designer must rely on experience, on precise, logical thinking, and on pedantic exactness." -- Nigel Shaw
“It’s always easier to do it the hard way.” -- Blackhart
“If Unix wasn’t so bad that you can’t give it away, Bill Gates would never have succeeded in selling Windows.” -- Blackhart
"Omit needless local variables." -- Strunk... had he taught programming
"We learn more from our mistakes than we do from getting it right the first time."
My first rule of debugging: "If you get a different error message, you're making progress."
My golden rule of database management: "Do not unto others' databases as you would not have done unto yours."
My general rule of software development: "Design should be top-down, but implementation should be bottom-up."