Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

J.M.K.

Alter Hase

  • »J.M.K.« ist der Autor dieses Themas

Beiträge: 500

Wohnort: BW Karlsruhe Ittersbach

Beruf: Schüler

  • Private Nachricht senden

1

18.03.2006, 01:45

Größe des Stacks ermitteln

Kann man sich irgendwie die momentane Stackgröße (belegt und frei) anzeigen lassen?

Jaja immer diese Rekursion mit Fakultät.

Ach und noch etwas. Warum bekomme ich bei einer zu großen Fakultät den Wert 0 als Ergebnis? Am Datentyp kann es ja eigentlich nicht liegen, da Binär einfach die zu großen Werte abgeschnitten werden.

Alle guten Dinge sind 3. Wie viele Rekursionen sollte man maximal verwenden, so das mir nicht der Stack abschmiert. (Beispiel Fakultät)

Sinnlose Fragen am späten Abend von einem neugierigen J.M.K.
Vegetarier essen meinem Essen das Essen weg.

Anonymous

unregistriert

2

18.03.2006, 01:52

Re: Größe des Stacks ermitteln

Zitat von »"J.M.K."«

(belegt und frei) .


Bin ich da jetzt blöd? Meine Stacks erhöhen sich mit der Summe der abgelegten Daten bis zu einem definierten Max..das ist ja der Sinn. Oder sollte ich mir eine Kugel geben?

J.M.K.

Alter Hase

  • »J.M.K.« ist der Autor dieses Themas

Beiträge: 500

Wohnort: BW Karlsruhe Ittersbach

Beruf: Schüler

  • Private Nachricht senden

3

18.03.2006, 01:56

Stimmt schon.

Mich interessiert die größe zwischen einem beliebigen Zustand und dem komplett vollen Stack. Damit ich weiß wieviel Platz ich noch verschwenden darf. :)
Vegetarier essen meinem Essen das Essen weg.

Anonymous

unregistriert

4

18.03.2006, 02:00

Ich muss gestehen das diese sehr tiefe Frage um diese Uhrzeit sehr gut rüberkommt!

Ich habe mir diese Frage noch nie gestellt da ich ja nur Stappele wenn ich weis was ich wie stapelle und wann ich was abgreife....*suspekt*

J.M.K.

Alter Hase

  • »J.M.K.« ist der Autor dieses Themas

Beiträge: 500

Wohnort: BW Karlsruhe Ittersbach

Beruf: Schüler

  • Private Nachricht senden

5

18.03.2006, 02:27

Werde jetzt erst mal eine Nacht drüber schlafen. :P
Vegetarier essen meinem Essen das Essen weg.

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

20.03.2006, 13:21

Die maximale Größe des Stacks ist nicht unbedingt fest vorgegeben.
Der Speicher wird in zwei "Bereiche" aufgeteilt: Heap und Stack. Der Stack wird quasi "top-down" aufgebaut. Der Heap benutzt die unteren Bereiche des Speichers. Einen Stack-Overflow bzw. Out-Of-Memory gibt es, sobald sich Stack und Heap "in die Quere kommen".

In dem Register esp ist die aktuell untere Grenze des Stacks hinterlegt.

Zeig doch mal Deine Implementierung der Fakultät-Funktion. Ohne die können wir ja nicht beurteilen, woran es liegen könnte, dass Du bei großen Zahlen 0 erhälst...

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

7

20.03.2006, 14:19

Also unter Windows ist der Stack schon begrenzt. Wie man aber ermitteln kann, wie viel noch frei ist, wüsste ich jetzt auch nicht.
Implementier deine Fakultätsfunktion doch einfach iterativ. Das ist dann nicht nur speicherschonender, sondern auch einfacher und schneller.

Ciao

J.M.K.

Alter Hase

  • »J.M.K.« ist der Autor dieses Themas

Beiträge: 500

Wohnort: BW Karlsruhe Ittersbach

Beruf: Schüler

  • Private Nachricht senden

8

20.03.2006, 15:00

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;

int Fakultaet(int n);

int main()
{
    int x = 0;
    cin >> x;
    
    cout << Fakultaet(x) << endl;
    
    system("PAUSE");
    
    return 0;
}

int Fakultaet(int n)
{
    if(n==0)
        return 1;
    else
        return (n * Fakultaet(n-1));
}


Klein aber fein und zwar mein. :)

Nunja das Programm läuft wie gesagt. Allerdings verstehe ich nicht so ganz warum mein Ergebnis bei zu großen Zahlen 0 ist. Klar kommt es zum Überlauf allerdings werden ja die zu großen Zahlen einfach abgeschnitten z.b. wird bei einem 1 Byte Datentyp bei 100101100 trotzdem mit 101100 weiter gerechnet. (Oder denke ich hier falsch.)
Vegetarier essen meinem Essen das Essen weg.

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

9

20.03.2006, 17:46

Wenn du es Rekursiv machen willst, dann nutz doch den Akkumulator-Trick. Wenn dein Compiler dann noch Tail-recursive Funktionen optimieren kann läuft deine Rekursion beliebig lang ohne den Stack vollzuhauen. (Sonst bringt der Akkumulator-Trick natürlich nichts.)



Zitat

Zitat

(belegt und frei) .


Bin ich da jetzt blöd? Meine Stacks erhöhen sich mit der Summe der abgelegten Daten bis zu einem definierten Max..das ist ja der Sinn. Oder sollte ich mir eine Kugel geben?


Als "belegt" definierst du jetzt als die Summe der abgelegten Daten und frei als "definiertes Max" minus "belegt".

Aber darfst dir auch die Kugel geben.
Why is 6 afraid of 7?
Because 7 8 9

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

10

23.03.2006, 15:31

Ich vermute, dass das Problem mit der Genauigkeit von Gleitkommazahlen zusammenhängt.
Wenn man z.B. 100! rechnen will hat man (sofern man soweit richtig rechnet) schon bei 90 einen Wert von ca. 5653408585997652480000 bzw. 5.653408585997652480000e21 wenn man jetzt mit 89 multiplizieren will gleicht der Rechner erst intern die beiden Werte einander an: 0.000000000000000000089e21 Je nach Genauigkeit deiner Variablen wird früher oder später der eigentliche Wert hinten abgeschnitten und übrig bleibt eine Multiplikation mit 0.0000000000e21 = 0.

Ich wüsste nicht, wo der Fehler sonst liegen soll^^

Werbeanzeige