Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zahlenausgabe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
23.11.2010, 10:10 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Interessant wäre noch wie lange so ein Programm auf einem halbwegs aktuellem PC laufen würde
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
23.11.2010, 10:30 Uhr
Hans
Library Walker
(Operator)


das könnte man doch ungefähr heraus kriegen, indem man die Zeit misst, die nötig ist, um die Zählschleife z.B. hundert Tausend oder eine Million mal durchlaufen zu lassen. Mit dem Wert rechnet man dann auf die restlichen 10^9 Durchläufe hoch.
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
23.11.2010, 14:15 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja ich vermute mal eher, das das hauptproblem die dateisystem i/o wäre, nicht das zählen an sich
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
23.11.2010, 15:31 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Hmm überraschenderweiße dauert das hier bei mir recht lange:

C++:
#include <stdio.h>
#include <time.h>

int main()
{
    int i=0;
    time_t seconds;

    seconds = time (NULL);

    for (; i<3000000000; ++i);

    seconds =  time (NULL) - seconds;

    printf ("%i", seconds);
    return 0;
}


nämlich ca. 6 sekunden.

Wenn wir das runterrechnen würde ein Schleifendurchlauf 2 Nanosekunden dauern. Das Ganze dann mal die 8999999999999999 Zahlen ergibt eine Laufzeit von 208 Tagen nur für das hochzählen.
Das Ganze ist denke ich nur grob umrechenbar aber wenn man dann noch die Schreibvorgänge bedenkt und das es keinen Datentypen gibt der die Zahlen aufnehmen kann und in ein Prozessorregister passt dürfte da eine sehr viel längere Laufzeit zustande kommen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
23.11.2010, 17:38 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja mach mal aus dem printf ein fprintf in eine datei, denke das dürfte schneller laufen als 6 sek, da der stdout etwas langsam ist.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
23.11.2010, 23:29 Uhr
Hans
Library Walker
(Operator)


Hi,

hab das Programm von Guybrush mal auf meinem alten K6-300MHz laufen gelassen. Da benötigt es 45 Sekunden.
Dann eine kleine Modifikation, um es in eine Datei schreiben zu lassen, wobei ich es aber nur bis 300.000 (dreihundert Tausend) zählen lassen habe. Das dauerte etwa 1 Sekunde und erzeugte eine knapp 2 MB grosse Datei. Bei einem weiteren Durchlauf um bis 3.000.000 zu zählen benötigte es 19 Sekunden, und erzeugte eine knapp 22 MB grosse Datei.

Zum Schluss hab ich es bis 30.000.000 zählen lassen. - Hatte da aber die Befürchtung, das die Ergebnisdatei nicht mehr auf meine Festplatte passt, deshalb hab ich da vorher noch eine Fehlerabfrage eingebaut, damit er mir kontrolliert aussteigt, und ich noch erfahre, wie weit er gekommen ist. Es lief dann 169 Sekunden, und stieg mit der Fehlermeldung "errno: No space left on device" bei i=21 665 415 aus. Die erzeugte Datei war etwa 175 MB gross.
Wenn ich das jetzt auf die 16-stellige Zahl hoch rechne, komme ich bei meinem Computer auf eine Laufzeit von 34.341,7 Jahre. - Ich glaube, man kann seine Zeit auch anders verplempern...

Hier mal die modifizierte Programmversion:

C++:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int i=0, q;
    time_t seconds;
    FILE *output;
    
    if ((output = fopen("zahlen.dat", "w")) == NULL)
       { printf ("Fehler beim öffnen der Datei.\n");
        exit(1);
      }  
    seconds = time (NULL);

    for (; i<30000000; ++i)
       { q = fprintf(output, "%d,", i);
         if (q<0) // Fehlerbehandlung
          {
            printf ("Programmabbruch bei i=%d;\n", i);
            perror ("errno");
            fflush(output);
            break;
          }
        
       }
    
    fclose (output);

    seconds =  time (NULL) - seconds;

    printf ("%i seconds", seconds);
    return 0;
}



Achso: @~CNewcomer, also dem Fragesteller: Ich hoffe, Du hast aus diesen Überlegungen und Experimenten etwas über grosse Zahlen und Rechenzeiten gelernt. Und noch etwas: die oben angegebenen Programme sind in C (ohne ++) geschrieben, falls Du auf die Idee kommst, sie einfach mal abzuschreiben.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 23.11.2010 um 23:38 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
24.11.2010, 12:27 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von FloSoft:
naja mach mal aus dem printf ein fprintf in eine datei, denke das dürfte schneller laufen als 6 sek, da der stdout etwas langsam ist.

Ich gebe in der Schleife ja nichts aus sondern zähle nur hoch.
Die einzige Ausgabe ist die Zeit am Ende.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
24.11.2010, 21:25 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


oh da hab ich mich verguckt hatte den ; am ende der schleife übersehen
--
class God : public ChuckNorris { };

Dieser Post wurde am 24.11.2010 um 21:25 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: