kleines Matheproblem

  • Hi,
    möchte gerne einen Körperfettrechner auf meiner HP einstellen. Folgende Formel liegt vor:
    s = Summe der drei Hautfalten (falte11, falte22,falte33)
    alter11=Alter
    d = 1.1125025 - 0.0013125*S + 0.0000055*S² - 0.000244*alter11
    Fett [%] = 495 / d - 450

    Habe das ganze in PHP mal so gelöst:

    PHP
    $s=$_POST['falte11']+$_POST['falte22']+$_POST['falte33'];
            $s2=pow($s, 2);
            $d1=0.0013125*$s;
            $d2=0.0000055*$s2;
            $d3=0.000244*$_POST['alter11'];
            $d =1.1125025-$d1+$d2-$d3;
            $d_ergebnis=$d-450;
            $ergebnis_maenner=495/abs($d_ergebnis);

    das Ergebniss sollte für falte11=18; falte22=19; falte33=11; alter11=32 eigentlich 14,72% sein. Bei mir ergibt sich aber immer 1.10258339332. Ich finde den Fehler nicht... auch wenn ich mal von Ergebnis rückwärts rechne werde ich nicht schlauer :cry:

    Hat jemand eine Idee?

    Gruß

    Matthias

  • $d2=0.0000055*$s2;


    die zeile schaut falsch aus.

    ich denke es müsste entweder

    PHP
    $d2=0.0000055*$s^2;


    oder


    PHP
    $d2=0.0000055*($s*$s);


    sein


    mfg :)



    Sei immer du selbst. Außer du kannst Batman sein. Sei immer Batman!

  • Nein Bendor das ist schon richtig, er verwendet pow davor das entsprich ^ in PHP

    @TS lass dir doch einfach mal per die($VAR); jedes Teilergebniss ausgeben , dann kommst du sicherlich auf deinen kleinen denkfehler

    mfg

    Einmal editiert, zuletzt von Pion (3. Dezember 2010 um 16:01)

  • Nunja würde er sinnvolle Variabelnamen verwenden, dann würde das ja durchaus übersichtlicher sein als eine lange Formel ;)

  • Vmtl. gibt es für die aber überhaupt keine sinnvollen Namen, das ist eine einfache mathematische Vorschrift, und da ist so etwas am ausdruckststärksten und effektivsten:

    PHP
    $s=$_POST['falte11']+$_POST['falte22']+$_POST['falte33'];
            $ergebnis = 495 / (1.1125025 - 0.0013125*s + 0.0000055*s*s - 0.000244*$_POST['alter11']) - 450;


    Ich würde bei mathematischen Sachen grundsätzlich möglichst viel in eine Expression packen, anstatt sinnlose Variablen anzulegen. Die zwei Zeilen verstehe ich zumindest jetzt viel besser.

  • Hi,

    hatte einen ähnlichen Code wie "the user", da dann aber ein falsches Ergebnis kam, habe ich, um die Teilergebnisse zu kontrollieren, das ganze zerlegt.

    Mit dem Code von "the user" bleibt das Ergebnis falsch, aber wird anders falsch :) Ich bin mir nicht sicher inwiefern PHP die Matheregeln komplett berücksichtigt. Klappt da Punkt vor Strich etc.?

    Das Ergebnis ist jetzt -1.91231602945 :confused:

    Ich schnall' es nicht...

    Ansonsten bleibt mir nur die Ursprungsformel nochmal zu kontrollieren, obwohl ich das schon zigfach getan habe.

    Gruß

    Matthias

  • Lass dir doch mal jedes Teilergebniss ausgeben, dann siehst doch was falsch läuft...
    Das ist doch nicht schwer

    Es liegt aber hier auch nicht an PHP sondern an deiner Formel, führ mal meinen code aus, da kann ja nie etwas höheres rauskommen so

    $d muss einfach höher sein..

    2 Mal editiert, zuletzt von Pion (6. Dezember 2010 um 15:39)

  • Hi Pion,

    habe, wie geschrieben, die Teilergebnisse schon kontrolliert. Daher die ganzen Variablen...

    Ich glaube der Fehler liegt in dieser Zeile

    PHP
    $ergebnis_maenner=495/abs($d_ergebnis);


    Bis dahn ist alles korrekt. Dann wird das Letzte Ergebnis falsch.

    Daher meine Frage inwiefern PHP die Matheregeln berücksichtigt...
    Da ein negatives Ergebnis kommt hat ich abs() verwendet.

    Gruß

    Matthias

  • Ich habs aber auch einmal durchgerechnet:

    Wenn du 495/-448.9456335" teilen willst kann kein 14 Prozent rauskommen

    Fehler == Formel
    Fehler != PHP
    PHP == schlecht in berechnungen
    PHP == gut genug für die berrechnungen

    2 Mal editiert, zuletzt von Pion (6. Dezember 2010 um 15:52)

  • PHP berücksichtigt die höhere Priorität von * und / (Punkt- vor Strichrechnung), du tust es allerdings nicht, in der Formel steht „Fett [%] = 495 / d - 450“, dein Code entspricht aber „495 / (d - 450)”.

    PS:

    PHP
    $s=$_POST['falte11']+$_POST['falte22']+$_POST['falte33'];
    $ergebnis = 495 / (1.1125025 - 0.0013125*$s + 0.0000055*$s*$s - 0.000244*$_POST['alter11']) - 450;


    Das entspricht genau deiner Formel und es kommt ein gescheiter Wert heraus.

  • Zitat


    Fehler == Formel
    Fehler != PHP
    PHP == schlecht in berechnungen
    PHP == gut genug für die berrechnungen

    Ich bezweifle, das das alles TRUE ist...

    Versuch mal:

    Das gibt bei mir:
    19.476221029405
    Und wenn ich deine Rechnung (unter berücksichtung von Potenz vor Punkt vor Strich) rechne, kommt raus (mim Windoof rechner)
    19.476221029405

    Was hast du gerechnet um auf die 14,7~% zu kommen?

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!


  • Wie zur Hölle rechnest du Sachen mit PHP aus? Ich glaub ich spinne…

    Das gibt bei mir:
    19.476221029405
    Und wenn ich deine Rechnung (unter berücksichtung von Potenz vor Punkt vor Strich) rechne, kommt raus (mim Windoof rechner)
    19.476221029405


    Jup, das kriege ich auch raus.

  • Das mit eval hab ich nur so gemacht, da irgendwie hier 3 rechnungen direkt als quellcode gepostet wurden, die NICHT iwie als gut bekannt wurden. Ausserdem hat meine Quellcode-Rechnung auch nicht hingehauen xD
    Und da dachte ich, wenn die Formel Stimmt, dann werd ich sie copy & paste ´n, dann kann nix schief gehen ;)

    P.S.: So rechne ich für gewöhnlich nicht, aber ich reche normalerweise auch kein Körperfett bzw. Formeln in der Dimension aus ;)

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!