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
TMember
type: 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:
Architecture
- Code Architecture could be summarized by the preview below:
- In
Arithmetics
namespaceSCalculator
class is the transition layer to outside of the namespace. It initializes allTAdder
,TComparer
ect. classes as static object instances andTypes
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.
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 通用数据层框架
Post Comment
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.