Vergrößern einer Variable funktioniert nicht richtig

GVille

Erfahrenes Mitglied
Hallo,

ich experimentiere gerade rum, habe jedoch ein Problem.

Code:
using System;

namespace Funktion
{
    class Program
    {
        static void Main()
		{
            double a, b, x;
            a = 100;
            b = 100;
            x = 0;
            Frage:
            if (a * b - x == 0){
                Console.WriteLine(x);
                goto Ende;}
            else
                x += 0.5;
            goto Frage;
            Ende:
            Console.ReadLine ();
		}
    }
}
Wenn ich bei "x += 0.5" eine kleinere Zahl als 0.5 eingebe, schreibt die Konsole mir nicht mehr den Wert 10000! Woran liegt das? Gibt es vielleicht eine bessere Methode, um das zu erreichen was ich erreichen möchte?
PS: Mit einer while oder for Schleife ist das selbe Ergebnis.

MfG
 
Zuletzt bearbeitet:
Hi.

Das liegt an Rundungsfehlern welche aufgrund des Datentyps nunmal auftretten.

Eine Lösung wäre nicht auf "gleich 0" zu prüfen, sondern auf einen gewissen Fehler zu prüfen. (In deinem Fall auf "kleiner 0.5")

Übrigens, gewöhn dir das goto ab. ;)
Nimm stattdessen eine Schleife, dann schaut das ganze gleich viel geordneter aus. :)

Schaut dann zum Beispiel so aus:
C#:
double a, b, x, step;
a = 100;
b = 100;
x = 0;
step = 0.1;

while (Math.Abs(a * b - x) >= step)
{
    x += step;
}

Console.WriteLine(x);
Console.ReadLine();

lg,..
 
Math.Abs verwendete ich, damit ich guten Gewissens auf ">= steps" prüfen kann, und vielleicht nicht irgenwie ein Vorzeichenproblem bekomme. ;)

Und wenn du es genauer haben willst, und mit Zahlen zur Basis 10 rechnest, benutz einen Datentyp der besser geeignet ist. ;)

C#:
decimal a, b, x, step;
a = 100;
b = 100;
x = 0;
step = 0.1M;

while (Math.Abs(a * b - x) >= step)
{
	x += step;
}

Console.WriteLine(x);
Console.ReadLine();

p.s.: Wie ich sehe hast du die Fragen auf welche ich antworte rauseditiert. Nungut, vielleicht interessieren dich die Antworten ja trotzdem noch. :D
 

Neue Beiträge

Zurück