Έχουν δημοσιευτεί
Κυριακή, 25 Φεβρουαρίου 2007 12:18 μμ
από το μέλος
PALLADIN
Επιτέλους, στο .Net Framework 3.5 υπάρχει BigInteger type και κατοικεί στο namespace System.Numeric.
Τώρα πια μπορούμε να αποθηκεύουμε και να διαχειριζόμαστε arbitary size ακέραιους, χωρίς unexpected overflows.
(Remark: ο BigInteger είναι ένα abstraction και είναι φυσικό να είναι αρκετά πιο αργός σε σχέση με τους άλλους primitive ακέραιους int, long)
Η ομάδα σχεδιασμού του BigInteger έχει κάνει overload αρκετούς operators, με αποτέλεσμα ο κώδικας να είναι καθαρός και να εκφράζει την επιθυμητή ενέργεια.
(Remark: Η δύναμη του operator overloading in use)
Τον τελευταίο καιρό αναπτύσσω σε F# μια βιβλιοθήκη με διαφορα infinite streams αριθμών.
Η F# περιέχει τον δικό της BigInt type στο namespace Microsoft.FSharp.Μath και μπορούμε να τo χρησιμοποιήσουμε και σε αλλα .Net projects.
Ένα απλό code sample σε C# 3.0
public static IEnumerable<BigInt> NaturalNumbers()
{
BigInt number = BigIntModule.zero;
while(true)
{
number += BigIntModule.one;
yield return number;
}
}
public static IEnumerable<BigInt> OddNumbers()
{
BigInt two = BigIntModule.of_int(2);
return NaturalNumbers().Select(number => two * number + BigIntModule.one);
}
public static IEnumerable<BigInt> EvenNumbers()
{
BigInt two = BigIntModule.of_int(2);
return NaturalNumbers().Select(number => two * number);
}
(Remark: BigInteger type μπορούμε να βρούμε και στην J#, αλλα δεν υποστηρίζει operator overloading)
Happy Coding...