Announcement

Collapse
No announcement yet.

hoch 3 in Delphi?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • hoch 3 in Delphi?

    Hallo, wie kann ich in Delphi hoch3 relalisieren?
    Quadrat geht mit sqr, aber hoch3?

  • #2
    In der Jedi Code Library (http://www.delphi-jedi.org). Da gibt's ne Funktion namens Power bzw. PowerInt. Die sollte dir weiterhelfen

    Comment


    • #3
      X^3 := X * X * X

      Comment


      • #4
        <p><font size="1" face="Verdana">Hallo, Bunny</font></p>

        <p><font size="1" face="Verdana">Allgemeiner ausgedrückt,
        möchtest Du folgendes berechnen</font></p>

        <p><font size="1" face="Verdana">y = x<sup><sup>n</sup></sup> Auf
        beide Seiten der Gleichung kann jetzt der natürliche Logarithmus
        (zur Basis 2) LN angewendet werden</font></p>

        <p><font size="1" face="Verdana">ln(y) = n*ln(x) Jetzt wird auf
        beide Seiten die Exponential Funktion e (kommt von Euler)
        angewendet</font></p>

        <p><font size="1" face="Verdana">e<sup><sup>ln(y)</sup></sup> = e<sup><sup>n*ln(x)
        </sup></sup>Das tolle daran ist, dass e<sup><sup>ln(y)</sup></sup>=
        y ist. Daraus folgt -&gt;</font></p>

        <p><font size="1" face="Verdana">y = e<sup><sup>n*ln(x)</sup></sup></font></p>

        <p><font size="1" face="Verdana">Damit kannts Du Dein Problem wie
        folgt lösen</font></p>

        <p><font size="1" face="Verdana">y:=exp(3*ln(x));</font></p>

        <p><font size="1" face="Verdana">Die Funktion hat den Vorteil,
        dass das Du damit auch Wurzeln ziehen kannst.</font></p>

        <p><font size="1" face="Verdana">1.414213562... = e<sup><sup>1/2*ln(2)
        </sup></sup>// Wurzel aus 2</font></p>

        <p><font size="1" face="Verdana">1.25992105... = e<sup><sup>
        1/3*ln(2) </sup></sup>// dritte Wurzel aus 2</font></p>

        <p><font size="1" face="Verdana">Da es keinen negativen
        Logarithmus einer Zahl gibt, mußt Du darauf achten, dass x nicht
        kleiner Null wird.<br>
        Hinweis: Wenn Du tatsächlich nur hoch 3 rechnen möchtest, ist
        Hagen's Vorschlag bestimmt erheblich schneller.</font></p>

        <p><font size="1" face="Verdana">Jens Schumann</font></p&gt

        Comment


        • #5
          Hallo Bunny, teste mal folgende Funktion
          <pre><font size="1" face="Verdana">
          Type
          EJsPowerBasisExponentNull = class(Exception);
          EJsPowerBasisExponentSqrt = class(Exception);
          EJsPowerNegBasisExponent = class(Exception);

          function JsPower(Basis, Exponent: Extended): Extended;
          var
          IsExpOdd : Boolean; // Zur Vorzeichenkorrektur wg z.B. -2^3 = -8
          _Basis : Extended;
          BasisSign : Boolean; // Vorzeichen der Basis + = True / - = False
          IntExponent : Integer;
          begin
          Result:=0.0; // Default Result
          _Basis:=Abs(Basis); // Hole den Betrag der Basis
          BasisSign:=Basis&gt;=0.0;
          IntExponent:=Integer(Trunc(Exponent));
          IsExpOdd:=Odd(IntExponent); // Ist der ganzzahlige Teil des Exponenten ungerade ?
          If (Exponent=0.0) and (Basis=0.0) then
          raise EJsPowerBasisExponentNull.Create('Basis und Exponent sind 0');
          If (Basis&lt;0.0) and (Exponent&gt;=0.0) and (Exponent&lt;1) then
          raise EJsPowerBasisExponentSqrt.Create('Wurzel aus negativer Zahl ist nicht erlaubt');
          If (Not BasisSign{Ist die Basis negativ}) and (Frac(Exponent)&lt;&gt;0.0) then
          raise EJsPowerNegBasisExponent.Create('negative Basis darf nur mit ganzzahligem Exponenten potenziert werden');

          If Exponent=0.0 then
          begin // Etwas hoch 0 ergibt definitionsgemäß immer 1
          Result:=1.0;
          Exit;
          end;
          If Exponent&lt;0.0 then
          Result :=1/Exp(Abs(Exponent) * Ln(_Basis))
          else
          begin
          Result := Exp(Exponent * Ln(_Basis))
          end;
          If (Not BasisSign) and(IsExpOdd) then // Vorzeichenkorrektur (-2)^3 = -8
          Result:=Result*(-1);
          end;

          </font></pre>
          <br>Ich habe alle Kombinationen aus Basis und Exponent getested, die mir eingefallen sind. Die Funktion verhielt sich wie erwartet. Wenn jemand eine Kombination entdeckt, die einen Fehler, oder eine neue Exception hervorruft, würde mich das interessieren<br>Jens Schuman

          Comment


          • #6
            In der Unit Math gibst die schöne Funktion Power

            Comment


            • #7
              Hallo,<br>ich glaube, die math unit ist nicht bei allen Delphi-Versionen dabei.<br>Jens Schuman

              Comment

              Working...
              X