Quiz: Gleitkommazahlen (Lösung)

Gleitkommazahlen werden im Binary Floating Point Format abgelegt und aufgrund ihrer endlichen Genauigkeit entstehen beim Zurückrechnen Ungenauigkeiten. Schreibt man das Quiz ein wenig um, so wird dies ersichtlich:

static void Main(string[] args)
{
    double d1 = 1.000001F;
    double d2 = 0.000001F;
 
    Console.WriteLine(d1);
    Console.WriteLine(d2);
    Console.WriteLine((d1 - d2) == 1.0);
    Console.ReadLine();
}

Ausgabe:
Gleitkommazahlen false

Eine Alternative mit einer Präzision von 96 Bit, wäre decimal. Dies ist für Finanzmathematische Themen gedacht und minimiert Rundungsfehler (bei Addition und Subtraktion treten keine Ungenauigkeiten auf).

static void Main(string[] args)
{
    decimal d1 = 1.000001M;
    decimal d2 = 0.000001M;
 
    Console.WriteLine(d1);
    Console.WriteLine(d2);
    Console.WriteLine((d1 - d2) == 1.0M);
    Console.ReadLine();
}

Ausgabe:
Gleitkommazahlen true

Die Thematik in allen Details gibt es u.a. hier zum Nachschlagen:

Binary Floating Point
http://kipirvine.com/asm/workbook/floating_tut.htm

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert