Moritz der Verzweifler: Hilfe! Javascript rechnet falsch?

Bin schwer am verzweifeln.
Ich habe versucht eine doppelte Gaußfunktion in ein Javascript zu basteln. also eine Gaußkurve, deren "sigma" eine neue Gaußfunktion ist.

sieht so aus die funktion:
(4 + 96*Exp[-(x/(6 + 41*Exp[-(y/47)^2]))^2])/100

nachdem ich schon des öfteren an der implementierung komplizierter funktionen gescheitert bin, hab ich das ganz langsam schritt für schritt von innen nach außen ausrechnen wollen, und zwar so:

var bas1 = (y/47);
var exp1 = (Math.pow(2, bas1));
var exp1b = ((-1)*exp1);
var efkt1 = (Math.exp(exp1b));
var nenn = (6 + (41 * efkt1));
var bas2 = (X /nenn);
var exp2 = (Math.pow(2,bas2));
var exp2b = ((-1)*exp2);
var efkt2 = (Math.exp(exp2b));
var key = (4 + (96 * efkt2));
var keyexp = (key / 100);

Das muss irgendwo ein fehler sein, da das script für zB X=20, Y=5 einen wert um 0,16 rausbekommt. mathematika (mit dem ich die funktion erstellt habe) und mein taschenrechner bekommen aber ~0,83 raus.... jetzt fällt schon auf, dass grade das komplement zu 1 ist, aber warum??

ich bin mir 99% sicher, dass der fehler in dem teil liegen muss, aber für alle, die es ganz genau haben wollen hier das gesamte script: (variablen heißen anders, aber damit kommt ihr sicher klar :P)

function keycap(val)
{
var wholvl = val;
var realExp;
var gro = wholvl;
var klei = monslvl;
if(monslvl >= wholvl){gro = monslvl; klei = wholvl;}
var quot = parseFloat(klei/gro);
var chardiff = parseFloat(100*(1-quot));
var bas1 = parseFloat(wholvl/47);
var exp1 = parseFloat(Math.pow(2, bas1));
var exp1b = parseFloat((-1)*exp1);
var efkt1 = parseFloat(Math.exp(exp1b));
var nenn = parseFloat(6 + (41 * efkt1));
var bas2 = parseFloat(chardiff/nenn);
var exp2 = parseFloat(Math.pow(2,bas2));
var exp2b = parseFloat((-1)*exp2);
var efkt2 = parseFloat(Math.exp(exp2b));
var key = parseFloat(4 + (96 * efkt2));
var keyexp = parseFloat(key / 100);

var maxlvl = (1.1 * wholvl);
var chklvl = (monslvl + 1);
var whoExp = ((wholvl + 9)/(lvlYOU + lvlrP1 + lvlrP2 + lvlrP3 + lvlrP4 + lvlrP5 + lvlrP6 + lvlrP7 + lvlrP8 + lvlrP9 + lvlrP10 + lvlrP11 + lvlrP12 + lvlrP13 + lvlrP14 + lvlrP15 + (9 * (rangePlay + 1))));
if(monslvl >= maxlvl+1){realExp = parseFloat(whoExp * keyexp);}
else if(wholvl >= chklvl){realExp = parseFloat(whoExp * keyexp);}
else if(wholvl == monslvl){realExp = whoExp;}
else{realExp = whoExp;}
if(wholvl == 0){realExp = 0;}

return realExp;
}

also... aufgerufen wird die funktion vom wert Y. X ist "chardiff". monslvl is in der übergeordneten funktion definiert, genau wie die anderen unbekannten variablen.

vielen dank an alle, die bis hierher gelesen haben ;)

  1. Hallo,

    sieht so aus die funktion:
    (4 + 96*Exp[-(x/(6 + 41*Exp[-(y/47)^2]))^2])/100

    nachdem ich schon des öfteren an der implementierung komplizierter funktionen gescheitert bin, hab ich das ganz langsam schritt für schritt von innen nach außen ausrechnen wollen, und zwar so:

    var bas1 = (y/47);

    //var exp1 = (Math.pow(2, bas1));
                  ^Schau Dir bitte die Funktion Math.pow(Basis, Exponent) http://selfhtml.teamone.de/javascript/objekte/math.htm#pow nochmal an, oder schreibe:
    var exp1 = bas1*bas1;

    var exp1b = ((-1)*exp1);
    var efkt1 = (Math.exp(exp1b));
    var nenn = (6 + (41 * efkt1));
    var bas2 = (X /nenn);

    //var exp2 = (Math.pow(2,bas2));
    var exp2 = bas2*bas2;

    var exp2b = ((-1)*exp2);
    var efkt2 = (Math.exp(exp2b));
    var key = (4 + (96 * efkt2));
    var keyexp = (key / 100);

    Hinweis:
    var x = 20;
    var y = 5;
    alert((4 + 96*Math.exp(-(x/(6 + 41*Math.exp(-(y/47)*(y/47))))*(x/(6 + 41*Math.exp(-(y/47)*(y/47))))))/100);

    viele Grüße

    Axel

    1. Ich lach mich alle.
      ja. manchmal steht man echt auf dem schlauch.

      danke dir vielmals.