Entwickler-Ecke

Basistechnologien - Warprechner rechnet total falsch


Kirk1701A - Do 15.03.18 11:01
Titel: Warprechner rechnet total falsch
Jolan Tru Leute,

ich bin momentan dabei, einen sog. Warprechner auf Basis folgender Formel zu gestalten (Konsole):

Quelltext
1:
f(x) = x ^((10/3) / (1 - (x/10)^(( 91,28 / (10-x)^0,27))))                    

Allerdings tritt das Problem auf, dass schon bei 1,2 unendlich auftritt. Unendlich darf erst bei exakt 10,0 auftreten. Ich habe schon den Entwickler diese Formel angeschrieben, er konnte sich das auch nicht erklären (er ist übrigens Mathematiker). Ich habe mit allen möglichen Taschenrechnern (Soft- und Hardware-Taschenrechner) versucht, die rechnen allerdings alles richtig. Könnt Ihr mir helfen? Ich gebe die URL an, die diese Formel, sowie eine Tabelle mit richtige Werten enthält. Sobald ihr meine Syntax braucht, meldet euch doch bitte.

Hier die URL: Warpcalc [http://www.arndt-bruenner.de/mathe/Allgemein/warp/warp.htm#warpcalc]

Danke

Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Do 15.03.2018 um 10:35
Moderiert von user profile iconTh69: Code-Tags hinzugefügt
Moderiert von user profile iconTh69: URL-Tag hinzugefügt


Th69 - Do 15.03.18 11:39

Hallo,

zeig mal deinen zugehörigen C#-Code.


Kirk1701A - Do 15.03.18 11:43

Jolan Tru,

hier der C# Code:

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:
static void Main()
        {
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine("Bitte geben Sie den zu berechnende Warpfaktor ein!");
            double Warpfaktor;

            if(double.TryParse(Console.ReadLine(), out Warpfaktor))
            {
                if (Warpfaktor < 10)
                {
                    double Basis = 1.0 - (Warpfaktor / 10.0);
                    double Exp1 = 91.28 / (Math.Pow((10.0 - Warpfaktor), 0.27));
                    double NennerF1 = Math.Pow(Basis, Exp1);
                    double ZählerF1 = 10.0 / 3.0;
                    double F1 = ZählerF1 / NennerF1;

                    Console.WriteLine("~ " + Math.Pow(Warpfaktor, F1));

                    Console.WriteLine(Math.Pow(Warpfaktor, (10 / 3) / (Math.Pow((1 - (Warpfaktor / 10)), (91.28 / (Math.Pow((10 - Warpfaktor), 0.27)))))));
                }

                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Der Warpfaktor " + Warpfaktor + " ist nach der TNG-Einteilung eine unendliche Geschwindigkeit.\n");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("Die USS Voyager hat schon einmal mit dem Delta-Flyer versucht, allerdings mit der Nebenwirkung, dass Tom Paris und Captain Janeway sich in eine andere Lebensform transformiert hatten. Das MHN konnte die Beiden gerade so noch zurückverwandeln. Seit dem gilt Warp 10 (und schneller) als die gefährlichste Geschwindigkeit überhaupt und auch als eine unendliche Geschwindigkeit, weil theoretisch mit Warp 10 der gesamte Raum mit einmal eingenommen wird.\n\nIn TOS flogen Schiffe oft über Warp 10 (damals noch als Sol-Antrieb (SpeedOverLight) bekannt). Zu TNG änderte man allerdings die Warpeinteilung.");
                    Console.ForegroundColor = ConsoleColor.White;
                }
            }
            
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("\n\nDer eingegebene Warpfaktor ist ungültig.\n");
                Console.ForegroundColor = ConsoleColor.White;
            }

            Console.ReadKey();
        }


Vielen Dank für die Hilfe :flehan:


Th69 - Do 15.03.18 11:51

Du berechnest die Variable Basis schon falsch. Erst die Potenz berechnen und dann diesen Wert von 1.0 abziehen...


Kirk1701A - Do 15.03.18 11:57

Jolan Tru,

also meinst du, ich muss erst die Potenz (von der ganz oberen Potenz bis zur unteren herunter) ausrechnen, um diese dann mit der Basis zu verrechnen.


Th69 - Do 15.03.18 12:04

Ich habe mal eckige Klammern für dich gesetzt:

Quelltext
1:
f(x) = x ^((10/3) / (1 - [(x/10)^(( 91,28 / (10-x)^0,27))]))                    

Potenz vor Punkt vor Strich :lol:


Kirk1701A - Do 15.03.18 12:23

Jolan Tru,

ich habe den Code angepasst/geändert. Hier die Berechnungssyntax:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
double a = 91.28 / (10 - Warpfaktor);
double b = (Warpfaktor/10);
double c = Math.Pow(b, Math.Pow(a, 0.27));

double F1 = Math.Pow(Warpfaktor, (10/3) / 1) - c;

Console.WriteLine("~ " + F1);

Er rechnet jetzt zwar, aber ich kann den Fehler der totalen Fehlberechnung nicht finden. :bawling: :autsch: :gruebel:


Kirk1701A - Do 15.03.18 12:29

PS:
Ich habe nochmal ein Debugging gemacht und gemerkt, dass in der Variablen F1 (siehe obigen Code) etwas falsch verrechnet wird. Liegt das an der Schreibweise?


OlafSt - Do 15.03.18 12:44

(10/3) / 1 ergibt... Genau, (10/3) ;)

So ist vllt besser (sehr ausführlich geschwafelt):

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
            double x = 3.5;

            //f(x) = x ^((10/3) / (1 - (x/10)^(( 91,28 / (10-x)^0,27)))) 
            double p1 = Math.Pow((10 - x), 0.27);
            double p2 = 91.28 / p1;
            double p3 = Math.Pow((x / 10.0), p2);
            double p4 = 1 - p3;
            double p5 = (10 / 3) / p4;
            double p6 = Math.Pow(x, p5);


Th69 - Do 15.03.18 12:44

Hä, jetzt hast du schon wieder die (anderen) Potenzen falsch berechnet.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
double x = Warpfaktor;

double a = 10.0 / 3.0;

double base2 = x / 10;
double pow2 = Math.Pow(10-x, 0.27);
double exp2 = 91.28 / pow2;
double pow1 = Math.Pow(base2, exp2);

double b = 1 - pow1;

double exp1 = a / b;

double f = Math.Pow(x, exp1);

s.a. Ideone-Code [https://ideone.com/SXaFw5]


Kirk1701A - Do 15.03.18 12:51

Jolan Tru,

WOW!!! Bin echt begeistert, vielen vielen vielen vielen vielen Dank Th69 und OlafSt!! Jetzt geht es.

P.S.:
Falls du es haben möchtest oder jmd. anderes es haben möchte, kann von mir das Programm ab dem 01.04.2018 anfordern (kostenlos).


Christian S. - Do 15.03.18 17:16

user profile iconKirk1701A hat folgendes geschrieben Zum zitierten Posting springen:
Jetzt geht es.

Dann markiere den Thread doch bitte auch als beantwortet. Einfach den Link in dem dezenten Hinweis unterhalb dieses Threads klicken ;)