Hallo steffen,
floor($lp*100000000000-(test($gegnera*100000000000,$v*100000000000)*$s1*100000000000));
So hab ich es nun gemacht funtzt :P
Glücksache! Und das ist mein Ernst. Bei anderen Zahlen kann es genausogut daneben gehen. Durch Multiplikation mit großen Zahlen wird die Genauigkeit nicht besser.
geht es auch leichter? :)
Du hast als Ausgangspunkt ganzzahlige Werte. Versuche doch stets bei Ganzzahlarithmetik zu bleiben.
$s1=$gegnerlp/($a-$gegnerv); // Dieser Wert ist 1.10526315789
$s2=$lp/($gegnera-$v);
Multipliziere beide Terme mit dem Produkt der beiden Divisoren:
$s1 = ($gegnerlp/($a-$gegnerv)) * ($a-$gegnerv) * ($gegnera -$v)
= $gegnerlp * ($gegnera - $v)
$s2 = ($lp / ($gegnera - $v)) * ($a-$gegnerv) * ($gegnera -$v)
= $lp * ($a - $gegnerv)
$s1 und $s2 sind jeweils mit dem gleichen Faktor multipliziert worden,
bleiben aber nun Ganzzahlen. Mit Ganzzahlen kann man exakt vergleichen, es entstehen keine Rundungsfehler. D.h. dieser Vergleich von $s1 und $s2 wird das korrekte Ergebnis zurückliefen.
Natürlich musst Du anschließend bei der Ausgabe, wieviele Punkte Unterschied es gibt, diesen Faktor wieder mit berücksichtigen. Das überlasse ich Dir als Übung. Nach dem Vergleich ist es jedoch irrelevant, ob Du Ganzzahl- oder Gleitpunktarithmetik verwendest, Du hast den richtigen Sieger ermittelt.
Bei den von Dir angegebenen Zahlen sollte eine typische vorzeichenbehaftete 32-Bit-Integer ausreichen (etwas über 2 Milliarden, genauer gesagt 2^31 - 1).
Freundliche Grüsse,
Vinzenz