Entwickler-Ecke

C# - Die Sprache - do-Schleife bricht nicht ab


Llena De Vida - Sa 16.11.13 23:59
Titel: do-Schleife bricht nicht ab
Hallo...

Ich setze mich ganz frisch mit C# (und überhaupt mit Programmierung) auseinander.
Momentan finde ich einfach den Fehler bei einer do-Schleife nicht.

Die Variable n soll solange verdoppelt werden und mit diesem neuen Wert die Berechnung so lange ausgeführt werden, bis das Ergebnis z kleiner oder gleich g = 0.00001 ist.
Dann soll über die Konsole ausgegeben werden, bei welchem Wert n dies der Fall ist.
Ich weiß, dass dies bei n = 524288 der Fall ist, aber das Programm rechnet immer weiter.
Erkennt er das "While" nicht?

Schon mal vielen Dank und ein schönes Wochenende...!





C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            {
                double n = 2;
                double x = 0;
                double y = 0;
                double z = y - x;
                double g = 0.00001;

                do
                {
                    n *= 2;
                    {for (double i = 1; i <= n; i++)
                    
                        x = x + ((1 / n) * Math.Sqrt((1 - (i / n) * (i / n))));
                    }
                    {for (double i = 0; i <= n - 1; i++)
                    
                        y = y + ((1 / n) * Math.Sqrt((1 - (i / n) * (i / n))));
                    }
                    z = y - x;
                    Console.WriteLine("n =" + n);

                }
                
                while (z >= g);
            }

            
            Console.ReadLine();

        }
    }
}


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Christian S. - So 17.11.13 00:07

Also wenn ich mir zusätzlich zu n auch noch z ausgeben lassen, geht das mal stramm auf die 0,5 zu und wird nie kleiner:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
z = 0,25            n = 4
z = 0,375                 n = 8
z = 0,437500000000001     n = 16
z = 0,468750000000001     n = 32
z = 0,484375              n = 64
z = 0,492187500000002     n = 128
z = 0,496093750000002     n = 256
z = 0,498046875000002     n = 512
z = 0,499023437500002     n = 1024
z = 0,49951171874999      n = 2048
z = 0,499755859374957     n = 4096
z = 0,499877929687457     n = 8192
z = 0,499938964843707     n = 16384
z = 0,499969482421832     n = 32768
z = 0,499984741210895     n = 65536
z = 0,499992370605426     n = 131072
z = 0,499996185302692     n = 262144
z = 0,499998092651325     n = 524288
z = 0,499999046325641     n = 1048576
z = 0,499999523162799     n = 2097152
z = 0,499999761583503     n = 4194304
z = 0,499999880792792     n = 8388608
z = 0,499999940397437     n = 16777216



P.S.: :welcome:


Llena De Vida - So 17.11.13 09:01

Moin Christian!

Ah! Dann stimmt tatsächlich die Formel nicht... Sowas.
Vielen Dank für Deine Hilfe und die Willkommensgrüße! :)

Einen schönen Sonntag wünscht
Alex


Th69 - So 17.11.13 11:20

Hallo,

da stimmt wohl die Klammerung bei (1 - (i / n) * (i / n)) nicht.

P.S. Welche Formel soll das denn sein - hat die einen bestimmten Namen?


Llena De Vida - Mo 18.11.13 23:26

Hallo Th69,

hab den Fehler gefunden, und nun läufts, vielen Dank!
Zu Beginn der Schleife mußten x und y wieder auf 0 gesetzt werden... daran habe ich nicht gedacht.

Vielen Dank für Eure Hilfe!

Einen schönen Abend,
Alexandra