Click here to Skip to main content
15,881,653 members
Articles / Programming Languages / C# 4.0
Tip/Trick

Member :: Memory-Wide-Number

Rate me:
Please Sign up or sign in to vote.
4.77/5 (11 votes)
15 Apr 2013GPL32 min read 26.1K   473   15   14
An infinite number implementation with advanced division and modulus operators.

Introduction

Have you ever wanted to overcome integer boundaries? If at least one time had you thought of multiplying or dividing a million digit by another, you're welcome. You're at the right place. You will make easy use of the TMember type: a Member object.

Code Usage

C#
m1 = TMember.FromString(txtTerm1.Text, new TRadix(10));
m2 = TMember.FromString(txtTerm2.Text, new TRadix(10));
uint n = 543215;
TMember m3 = TMember.FromInt(n, new TRadix(10));
C#
uint[] data1 = new uint[456];
uint[] data2 = new uint[456];
for (int i = 0; i < 456; i++)
{
  data1[i] = (uint)(i * i);
  data2[i] = (uint)(i * i%17);
}
m1 = TMember.FromData(data1, new TRadix(uint.MaxValue));
m2 = TMember.FromData(data2, new TRadix(uint.MaxValue));
C#
TMember mhex = TMember.FromString("4321543254362", new TRadix(16));
TMember mbinary = mhex.ToDecimal().DecimalToRadix(new TRadix(2));
C#
public static TMember operator +(TMember term1, TMember term2)
public static TMember operator +(TMember term1, TDigit term2)
public static TMember operator -(TMember term1, TMember term2)
public static TMember operator -(TMember term1, TDigit term2)
public static TMember operator *(TMember term1, TMember term2)
public static TMember operator *(TMember term1, TDigit term2)
public static TMember operator /(TMember term1, TMember term2)
public static TMember operator /(TMember term1, TDigit term2)
public static TMember operator %(TMember term1, TMember term2)
public static TMember operator %(TMember term1, TDigit term2)
public static TMember operator <(TMember term1, TMember term2)
public static TMember operator <(TMember term1, TDigit term2)
public static TMember operator >(TMember term1, TMember term2)
public static TMember operator >(TMember term1, TDigit term2)
public static TMember operator <=(TMember term1, TMember term2)
public static TMember operator <=(TMember term1, TDigit term2)
public static TMember operator >=(TMember term1, TMember term2)
public static TMember operator >=(TMember term1, TDigit term2)
public static TMember operator ==(TMember term1, TMember term2)
public static TMember operator ==(TMember term1, TDigit term2)
C#
txtResult.Text = "" + (m1 * m2) % TMember.FromString("54366");

ScreenCast

  • It is so easy to initialize a Member object:
  • Now you can initialize your Member instance with various radixes, like this one:
  • You can also make conversion of different radixes to or from decimal using the ToDecimal and DecimalToRadix methods. They're public now:
  • I implemented nearly all operators valid for integers:
  • And you can make use of it:
  • The result is simple to see; not so easy to evaluate, however:

Architecture

Member/SolutionExplorer.PNG

C#
return SCalculator.Comparer.Gt(term1, term2);
C#
uint n = 3;
n = SValidator<uint>.Validate(num => num > 10, n);
C#
numstr=SValidator<string>.Validate(s => s.All<char>(ch => Char.IsNumber(ch)), numstr);

I love it Smile | :)

Member/ClassDiagram.PNG

  • The code architecture could be summarized as below:
  • In the Arithmetics namespace, the SCalculator class is the transition layer to the outside of the namespace. It initializes all TAdder, TComparer etc. classes as static object instances and Types classes make use of them like this:
  • As you can see, this code compares two values if term1 > term2 and returns the result.
  • The Types namespace has these core types for Member:
    • TMember: main entry class
    • TDigit: represents one digit of a number (with any radix)
    • TRadix: represents radix for digit and member
    • ESigns: for now, this enumeration is orphan
  • The Constraints namespace is my favorite. Imagine a validator of any type making checks and returning the checked type in one line of code:
  • This line of code validates n if it is greater than or equal to (>=) 0 (now that is false because n=3). If not, it throws an exception. And here is a some more complicated example (trick: you can check if the string has only decimal digits):
  • There is also another class TSelfValidator<TType> to validate derived classes, but that's enough explanation. If you're still with me, I appreciate your patience. Don't get afraid. I am almost finished.

Last Word

  • I strongly advice you to look over my code if you're interested in using it. Mathematics imply. Computers reply.

History

 
  • 2015.07.18  This version fixes division error. 
  • 2013.04.15  This version fixes not starting error. And adds start over button.
  • 2011.06.11: This version supports radix conversion using the DecimalToRadix and ToDecimal methods.
  • 2011.06.10: This version does not provide support for floating number implementation. m1 / m2 simply returns m1 // m2 (true div: remainder trimmed).

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)


Written By
Software Developer
Turkey Turkey
I am a software developer emphasizing algorithm side of development.

Comments and Discussions

 
NewsNot able to download. Pin
Abhishek Pant19-Jul-15 8:40
professionalAbhishek Pant19-Jul-15 8:40 
GeneralRe: Not able to download. Pin
lampiclobe21-Jul-15 8:14
lampiclobe21-Jul-15 8:14 
GeneralRe: Not able to download. Pin
Abhishek Pant21-Jul-15 8:18
professionalAbhishek Pant21-Jul-15 8:18 
GeneralMy vote of 4 Pin
jfriedman15-Apr-13 10:42
jfriedman15-Apr-13 10:42 
GeneralRe: My vote of 4 Pin
lampiclobe16-Apr-13 3:43
lampiclobe16-Apr-13 3:43 
GeneralRe: My vote of 4 Pin
jfriedman16-Apr-13 3:49
jfriedman16-Apr-13 3:49 
GeneralMy vote of 5 Pin
Halil ibrahim Kalkan9-Jun-11 19:54
Halil ibrahim Kalkan9-Jun-11 19:54 
GeneralRe: My vote of 5 Pin
lampiclobe10-Jun-11 2:26
lampiclobe10-Jun-11 2:26 
GeneralHave you seen BigInteger structure? Pin
Paulo Zemek9-Jun-11 11:03
mvaPaulo Zemek9-Jun-11 11:03 
GeneralRe: Have you seen BigInteger structure? Pin
lampiclobe10-Jun-11 0:40
lampiclobe10-Jun-11 0:40 
GeneralRe: Have you seen BigInteger structure? Pin
PIEBALDconsult19-Jul-15 6:13
mvePIEBALDconsult19-Jul-15 6:13 
GeneralRe: Have you seen BigInteger structure? Pin
lampiclobe21-Jul-15 8:17
lampiclobe21-Jul-15 8:17 
GeneralRe: Have you seen BigInteger structure? Pin
PIEBALDconsult21-Jul-15 8:20
mvePIEBALDconsult21-Jul-15 8:20 
GeneralRe: Have you seen BigInteger structure? Pin
lampiclobe24-Jul-15 2:22
lampiclobe24-Jul-15 2:22 

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

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