Ähnliche Kurve?

Hallo.
Ich arbeite gerade daran ein Programm für ein sehr limitiertes Computersystem zu schreiben (keine floats nur intenger). Ich wollte eine Formel berechnen die sehr schnell, nein, zu schnell das Limit des Systems erreichte. Dazu habe ich schon im /t/semi-komplexe-formel-mit-intenger-berechnen/6893988

Das hier ist sie:

64/1.01^x

Hier ein Graph zum veranschaulichen.

Nun was ich gerne fragen würde wäre ob jemand eine Formel kennt, die ohne grosse Zwischenlösungen (die obige Formel liefert leider stellen in tausenderhöhe. Das sprengt meinen Rahmen.) ein ähnliche/s Resultat/Kurve bietet. Sie sollte von 1 x bis 1000-5000 x positiv bleiben. Wenn sie bei Werten darüber ins negative rutscht werde ich eine Maximum einbauen. Und bei 0 könnte ich auch eine Ausnahme einbauen falls eine Formel unter 1 ins unendlich rutscht. „x“ ist eine Natürliche Zahl und sollte bis 5000 reichen.

Vielen Dank schon im Voraus.

64/1.01^x

Hallo Lomsor,

wie willst du denn die Werte dieser Funktion berechnen wenn du nur integer zur Verfügung hast? Das dürfte kaum funktionieren.
Die großen Zwischenlösungen lassen sich aber vermeiden, denn

\frac{64}{1.01^x}=64\left(\frac{100}{101}\right)^x=64\frac{100^x}{101^x}

Du musst die 64 also x mal mit 100 multiplizieren und x mal durch 101 dividieren. In welcher Reihenfolge du das machst ist allerdings egal. Du kannst also auch abwechselnd einmal multiplizieren, dann dividieren, dann wieder multiplizieren usw. Dadurch bleiben die Zwischenergebnisse schön klein. Das Problem ist, dass du dabei mit integer (und der damit vermutlich einhergehenden Rundung) nicht weit kommst, weil du je nachdem wir groß x ist, sehr oft runden musst.
Um die Anhäufung von Rundungsfehlern zumindest ein bisschen zu vermeiden, kannst du zuerst so oft mit 100 multiplizieren, bis eine gewisse obere Toleranz erreicht ist was die erlaubte Größe der verwendeten Zahlen angeht, danach dividierst du solange durch 101 bis eine gewisse untere Toleranz erreicht ist. So machst du weiter, bis du x mal mit 100 multipliziert hast. Danach musst du eventuell noch ausstehende Divisionen durch 101 ausführen.
Viel Spaß beim Programmieren!

hendrik

Hi,

also wenn es wirklich nur um diese Kurve geht, und nicht allgemeiner um die pow-Funktion, dann kannst Du Newton’s binomische Reihe verwenden:

\begin{align}
(1+a)^x=1&+ax+\tfrac12,a^2, x(x-1)+\tfrac16,a^3,x(x-1)(x-2)+\ldots\notag\
&+\tfrac1{n!},a^n,x(x-1)\cdots(x-n+1)+\ldots
\end{align}

Mit a=0.01 werden die Beiträge der einzelnen Summanden sehr schnell sehr klein, so dass Du beim dritten oder vierten abbrechen kannst. Für kleine x sollte die führende 1 dominieren, für große sind alle Summanden positiv.

Gruß, Lutz

Danke für die Antwort. Spass werd ich haben.