![]() |
Die Zahl e, aber wie in Pascal? [Erledigt!!]
Hi,
ich programmiere gerade einen Taschenrechner. Nun will ich die Zahl e (2,7182...) nach einem Button.Click in einem Panel anzeigen lassen. Die mathematische Formel für e ist: e = ( 1 + 1/n)^n Um so größer n ist, desto genauer wird e. Wie setze ich das jetzt in Pascal um?
Delphi-Quellcode:
Dass das so nicht geht, ist mir völlig klar. :wink:
procedure TForm1.Button23Click(Sender: TObject);
var e: Real; begin e := (1 + 1/1000)^1000; // hier ist n z.B. 1000 // weiterer Code... end; Vielleicht so irgendwie:
Delphi-Quellcode:
Wie kann ich das sonst machen? :gruebel:
procedure TForm1.Button23Click(Sender: TObject);
var e: Real; Temp: String; begin e := (1+1/1000); Str(sqr():3:1, Temp); // weiterer Code... end; MfG Marc |
Re: Die Zahl e, aber wie in Pascal?
Delphi-Quellcode:
:???:
const My_E = 2.7182818284590452353602874713527
|
Re: Die Zahl e, aber wie in Pascal?
Delphi-Quellcode:
e := Power(1 + 1 / 1000, 1000);
|
Re: Die Zahl e, aber wie in Pascal?
Also so ginge es:
Delphi-Quellcode:
Allerdings kann es dabei ggf. zu einem Overflow kommen. Deshalb gibt es noch eine andere (allerdings langsamere) Methode:
function GetEuler(n: Cardinal): Extended;
begin Result:= IntPower(1+1/n, n);//= (1+1/n)^n end;
Delphi-Quellcode:
Je höher dort n angegeben wird, umso genauer ist das Ergebnis.
function GetEuler(n: Cardinal): Extended;
function Fakultaet(x: Cardinal): Int64; var c: Cardinal; begin Result:=2; for c:= 3 to x do Result:= Result*c; end; var i: Integer; begin Resuult:= 2; for i:= 2 to n do Result:= Result + 1/Fakultaet(i); end; MfG Binärbaum |
Re: Die Zahl e, aber wie in Pascal?
Würde dir auch raten, e als Konstante zu hinterlegen, da es dir vermutlich nciht um Näherungsverfahren selber geht.
Erstmal kann es Problemem mit zu hohen Potenzen geben und zweites kannst du dir so ein wenig Rechenpower sparen :) |
Re: Die Zahl e, aber wie in Pascal?
Hi,
thanks @ all! Ich habe Binärbaums Lösung übernommen. :thumb: (Klappt wunderbar!) Zitat:
Genau so wollte ich es nicht haben. :wall: (Trotzdem thx) MfG Marc |
Re: Die Zahl e, aber wie in Pascal?
Ich kenn ja deine Anwendung nicht aber eine const währ doch viel fixer :gruebel: kannst ja im Vorfeld deinen Rechner mal über nacht laufen lassen, um dein e genau genug zu bekommen :mrgreen: (kannst ja dann wieder die zu genauen Kommastellen (niedriges n) wegkürzen :duck: )
|
Re: Die Zahl e, aber wie in Pascal?
Zitat:
Bei n=1 ist das Ergebnis 2. Bei n=unendlich ist das Ergebnis e (also 2,71828..). Ich denke doch, dass bestimmte Delphi-Zahlentypen einen Wert zwischen 2 und 2,718.. aufnehmen können. :twisted: :wink: |
Re: Die Zahl e, aber wie in Pascal?
Wenn es einfach nur um eine simple Rechnung geht, dann ist die Varainte, e als Konstante zu deklarieren und damit zu rechnen, am einfachsten (weil schnellste). Aber bei Näherungsverfahren für e kommt man um längere Berechnungen nun mal nicht herum.
MfG Binärbaum @IngoD7 Es ist mir schon klar, dass bei n=1 kein genauer Wert für e errechnet wird. Ich habe ja auch extra dazugeschrieben, dass die Werte nur genau sind, wenn n ziemlich groß ist. Und n=1 ist halt keine große Zahl. :roll: |
Re: Die Zahl e, aber wie in Pascal?
Zitat:
Achte bitte drauf, was gemeint war. Ich hatte deine Aussage mit dem Overflow zitiert und wollte darlegen, dass es dazu nicht kommen kann. |
Re: Die Zahl e, aber wie in Pascal?
[quote="IngoD7"]
Zitat:
|
Re: Die Zahl e, aber wie in Pascal?
Zitat:
Zitat:
André |
Re: Die Zahl e, aber wie in Pascal?
Auch wenn es wahrscheinlich nur noch begrenzt sinnvoll ist, hier die Eulersche Zahl auf 200 Nachkommastellen genau:
Zitat:
![]() Also wenn es nicht um mathematische Herleitung geht, sondern rein darum, die Zahl zu benutzen, dann sind Konstanten wohl immer vorzuziehen. [edit=sakura] Mal ein paar Umbrüche zugelassen :roll: Mfg, sakura[/edit] |
Re: Die Zahl e, aber wie in Pascal?
Es ist wohl kaum sinnvoll, e auf 200 oder mehr Stellen anzugeben, da die Floating-Point-Datentypen in Delphi nur auf ca. 10-15 Stellen genaue Werte speichern können (siehe OH zu den Datentypen Single, Real, Double, Extended).
Außerdem ging es dem Threadersteller auch um ein Näherungsverfahren und nicht darum, welches die 200. Stelle von e ist. MfG Binärbaum |
Re: Die Zahl e, aber wie in Pascal?
Manchmal wundere ich mich ueber die Fantasielosigkeit der Programmierer:
Delphi-Quellcode:
var
e: Extended; //... e := Exp(1); Die Delphi-Hilfe haette euch gesagt: function Exp(X: Real): Real; Description In Delphi code, Exp returns the value of e raised to the power of X, where e is the base of the natural logarithms. Wenn also Exp den Wert von e^x gibt, dann ratet mal was wohl e^1 ist :roll: Greetz alcaeus |
Re: Die Zahl e, aber wie in Pascal?
Wenn man n als Konstante angibt dann kann man auch gleich e als Konstante benutzen da die Formel eh immer den gleichen Wert errechnet.
|
Re: Die Zahl e, aber wie in Pascal?
Zitat:
Die FPU des Prozessors bietet eine Konstante FLDL2E. FLDL2E entspricht log2(e) Exp(1) macht also "nur" ein 2^log2(e) :-) -> also 2 ^ FLDL2E-Konstante (Anmerkung: ^ = hoch bzw Power() ) Ich perönlich bevorzuge da eine Konstante wie schon weiter oben beschrieben. Das ist der ASM Code von Exp()
Delphi-Quellcode:
asm
{ e**x = 2**(x*log2(e)) } FLDL2E { y := x*log2e; } FMUL FLD ST(0) { i := round(y); } FRNDINT FSUB ST(1), ST { f := y - i; } FXCH ST(1) { z := 2**f } F2XM1 FLD1 FADD FSCALE { result := z * 2**i } FSTP ST(1) end; |
Re: Die Zahl e, aber wie in Pascal?
Zitat:
einfach nur eine Konstante nehmen wollte. (Sonst hätte ich diesen Thread erst gar nicht eröffnen müssen. :wink: ) MfG Marc P.S.: Danke noch mal für alle Antworten! :dp: |
Re: Die Zahl e, aber wie in Pascal?
Zitat:
|
Re: Die Zahl e, aber wie in Pascal?
@Chegga : Warum möchtest du keine Konstante verwenden? :gruebel:
|
Re: Die Zahl e, aber wie in Pascal?
Hallo!
(e hoch X) = 1 + X/1! + (X hoch 2)/2!+ (X hoch 3)/3! + ... + (X hoch n)/n! Die Zahl e wäre (e hoch 1) also setzt Du für X die Zahl 1 ein und berechnest n Glieder der obigen Reihe je nach geforderter Genauigkeit. schöni |
Re: Die Zahl e, aber wie in Pascal?
Zitat:
MfG Binärbaum |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz