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 easily use of TMembertype: a Member object. 

Code Usage 

  • It is so easy to initialize a Member object:
    m1 = TMember.FromString(txtTerm1.Text, new TRadix(10));
    m2 = TMember.FromString(txtTerm2.Text, new TRadix(10));
  • And what is this radix? For now i haven't implemented radixes other than 10(decimal: [0-9]) . But i will do.
  • I implemented nearly all operators valid for integers: 
    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) 
  • And you can make worth of it:
     txtResult.Text = "" + (m1 * m2) % TMember.FromString("54366"); 
  • Result is simple to see; not so easy to evaluate however:

     program-output.PNG

    Architecture  

  • Code Architecture could be summarized by the preview below:  

    SolutionExplorer.PNG

  • In Arithmetics namespace SCalculator class is the transition layer to outside of the namespace. It initializes all TAdder, TComparer ect. classes as static object instances and Types  classes make use of them like this way: 
    return SCalculator.Comparer.Gt(term1, term2);  
  • As you can see this code compares two values if term1 > term2 and returns the result. 
  • Types Namespace has core types for Member: 
    • TMember: main entry class 
    • TDigit: represents one digit of number (with any radix) 
    • TRadix: represents radix for digit and member 
    • ESigns: for now this enumeration is orphan 
  • Constraints Namespace is my favorite. Imagine a validator of any type making checks and returning checked type in one line of code: 
    uint n = 3;
    n = SValidator<uint>.Validate(num => num > 10, n); 
  • This line of code validates n if it is gte(>=) than 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 string has only decimal digits) :
    numstr=SValidator<string>.Validate(s => s.All<char>(ch => Char.IsNumber(ch)), numstr); 

    I love it :)

  • There is also another class TSelfValidator<TType> to validate derived classes but that's enoug to explain. If you're still with me, i appreciate your patience. Don't get afraid. I have almost finished.ClassDiagram.PNG

History

  •  This version does not provide support for floating number implementation. m1 / m2 simply returns m1 // m2 (true div: remainder trimmed).  

Last Word  

  • I strongly advice you to look over my code if you're willing to use it at first.

    Mathematics imply. Computers reply. 

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"