Durchschnittsfunktion ohne Überlaufausnahme

.NET Framework 3.5.
Ich versuche, den Durchschnitt einiger ziemlich großer Zahlen zu berechnen.
Zum Beispiel

using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        var items = new long[]
        ,                {
                            long.MaxValue - 100, 
                            long.MaxValue - 200, 
                            long.MaxValue - 300
                        };
        try
        {
            var avg = items.Average();
            Console.WriteLine(avg);
        }
        catch (OverflowException ex)
        {
            Console.WriteLine("can't calculate that!");
        }
        Console.ReadLine();
    }
}

ffensichtlich ist das mathematische Ergebnis 9223372036854775607 long.MaxValue - 200), aber ich bekomme da eine Ausnahme. Dies liegt daran, dass die Implementierung (auf meinem Computer) der von .NET Reflector überprüften durchschnittlichen Erweiterungsmethode wie folgt lautet:

public static double Average(this IEnumerable<long> source)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }
    long num = 0L;
    long num2 = 0L;
    foreach (long num3 in source)
    {
        num += num3;
        num2 += 1L;
    }
    if (num2 <= 0L)
    {
        throw Error.NoElements();
    }
    return (((double) num) / ((double) num2));
}

Ich weiß, dass ich eine BigInt-Bibliothek verwenden kann (ja, ich weiß, dass es @ iinbegriffe in .NET Framework 4.0, aber ich bin an 3.5 gebunden.

Aber ich frage mich immer noch, ob es eine ziemlich einfache Implementierung zum Berechnen des Durchschnitts von Ganzzahlen ohne eine externe Bibliothek gibt. Wissen Sie über eine solche Implementierung Bescheid?

Vielen Dank!

AKTUALISIEREN

Das vorherige Beispiel mit drei großen Ganzzahlen war nur ein Beispiel, um das Problem des Überlaufs zu veranschaulichen. Die Frage ist über die Berechnung eines Durchschnitts vonirgendei Zahlensatz, der zu einer großen Zahl summiert werden kann, die den Maximalwert des Typs überschreitet. Entschuldigung für diese Verwirrung. Ich habe auch den Titel der Frage geändert, um zusätzliche Verwirrung zu vermeiden.

Danke an alle !!

Antworten auf die Frage(34)

Ihre Antwort auf die Frage