Member :: Memory-Wide-Number
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
Memberobject: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:
Architecture
- Code Architecture could be summarized by the preview below:
- In
ArithmeticsnamespaceSCalculatorclass is the transition layer to outside of the namespace. It initializes allTAdder,TComparerect. classes as static object instances andTypesclasses make use of them like this way:return SCalculator.Comparer.Gt(term1, term2); - As you can see this code compares two values if
term1>term2and returns the result. TypesNamespace 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
ConstraintsNamespace 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.
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 通用数据层框架
发表评论
yrxwgE Looking forward to reading more. Great post.Really looking forward to read more. Fantastic.
4eY6Nd A big thank you for your blog post. Cool.
vlOe6g I really liked your post.Really looking forward to read more. Much obliged.