Anfängerfragen

Dieses Forum beschäftigt sich mit allen Fragen, Kommentaren und Anregungen zu MemBrain Skripten. Auch der Austausch von Skripten zwischen MemBrain Benutzern soll hiermit gefördert werden.
Wenn Sie ein interessantes Skript haben, das Sie anderen MemBrain Benutzern zur Verfügung stellen wollen, dann Erstellen Sie dafür jeweils bitte ein neues Thema in diesem Forum. Der Titel des Themas sollte es anderen Benutzern erlauben möglichst schnell zu erfassen, wozu Ihr Skript dient.
schnurpel
Posts: 24
Joined: Fri 25. Dec 2009, 20:15

Anfängerfragen

Post by schnurpel »

hallo!

nach folgender skriptzeile:

if (1/v < x)
{
}

bekomme ich die fehlermeldung
Exception occurred during script execution!

liegts am dividierzeichen?
wenn ja, welches ist zu verwenden?

danke für die hilfe!
schnurpel
Posts: 24
Joined: Fri 25. Dec 2009, 20:15

Re: Anfängerfragen

Post by schnurpel »

hmmm, also das problem ist folgendes:

maximum=ergebnis/2;

funktioniert, aber bei

maximum=1/ergebnis;

kommt immer obige fehlermeldung.

maximum ist aber als double deklariert.

da bin ich leider ratlos :-(

zur erläuterung: "ergebnis" ist der wert aus einer datenzelle, den ich übernehme. liegt da vielleicht ein formatproblem vor?
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Anfängerfragen

Post by Admin »

Kann es vielleicht sein, dass 'ergebnis' machmal '0' wird und so eine 'Division by Zero' exception auftritt?

Viele Grüße
Thomas Jetter
schnurpel
Posts: 24
Joined: Fri 25. Dec 2009, 20:15

Re: Anfängerfragen

Post by schnurpel »

Admin wrote:Kann es vielleicht sein, dass 'ergebnis' machmal '0' wird und so eine 'Division by Zero' exception auftritt?

Viele Grüße
das muß irgendein anderes problem sein. ich hab jetzt folgendes rausgefunden:

maximum=1/2; ergibt 0

aber maximum=1/2.0;
oder maximum=1.0/2;

ergibt jeweils richtig 0.5

das heißt, ist eine ganze zahl im spiel, kommt der fehler

gruß
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Anfängerfragen

Post by Admin »

das liegt daran, dass eine Division von Integerzahlen immer ein ganzzahliges Ergebnis hat, d.h., Nachkommastellen werden abgeschnitten.

Abhilfe schafft da entweder das Hinschreiben als Gleitkommazahl (also '1.0' anstatt '1') oder das explizite Casten ( = Umwandeln) in eine Gleitkommazahl vor der Division. In Angelscript geht das so:

Code: Select all

uint zahl = 5;  // Ganzzahlvariable

double ergebnis1 = zahl / 4;  // Diese Division ergibt als Ergebnis 0, da eine Ganzzahl dividiert wird
double ergebnis2 = double(zahl) / 4;  // Diese Division ergibt den Gleitkommawert der Division, da 'zahl' vor der Division auf 'double' gecastet wird.

Viele Grüße
Thomas Jetter
schnurpel
Posts: 24
Joined: Fri 25. Dec 2009, 20:15

Re: Anfängerfragen

Post by schnurpel »

so etwas in der art hatte ich mir gedacht und es über einen umweg gelöst.
aber vielen dank für die information, sie wird zukünftig sehr hilfreich sein.

vg
schnurpel
Posts: 24
Joined: Fri 25. Dec 2009, 20:15

Re: Anfängerfragen

Post by schnurpel »

ich komm mir langsam schon blöd vor mit meinen vielen fragen, aber ich benutze das programm derzeit 20 stunden am tag und die ergebnisse sprechen für sich!

jetzt ist ein neuerliches problem aufgetaucht:

bei einem teil meiner validationsdaten bricht das skript mit folgender meldung ab:

Exception occurred during script execution!

komischerweise wird das netz aber mit den gleichen daten einwandfrei trainiert.
und das skript funktioniert bei anders gesplitteten daten auch.

was könnte das sein?
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Anfängerfragen

Post by Admin »

Da kann ich leider nicht weiterhelfen, ohne alle zum Debuggen nötigen Informationen zu haben.

Ich bräuchte also ein Komplettpaket aus Skript, Netz, Daten usw. mit dem sich der Skriptabsturz reproduzieren lässt, dann versuche ich gerne zu helfen.

Viele Grüße
Thomas Jetter
schnurpel
Posts: 24
Joined: Fri 25. Dec 2009, 20:15

Re: Anfängerfragen

Post by schnurpel »

danke, habs jetzt nach ner "nachtschicht" fieselkram selbst rausgefunden.

in einigen wenigen datensätzen hat sich ein "nicht"tzeichen (in vb "") eingeschlichen.
beim training werden die ignoriert, aber beim validieren per skript bricht das skript ab.

immer wieder gerne angemerkt: ganz tolles programm!
schnurpel
Posts: 24
Joined: Fri 25. Dec 2009, 20:15

Re: Anfängerfragen

Post by schnurpel »

mir fällt auf, daß sich netze oft recht gut trainieren, dann schlechter werden und dummerweise nicht mehr auf den guten zwischenwert zurückkehren.

gibt es eine funktion, die immer das netz zwischenspeichert, wenn ein neuer bestwert erreicht ist?
ich empfinde das als höchst sinnvoll und hilfreich, auch wenn das auf kosten der performance geht.

vg
Post Reply