Problem mit double

  • geschlossen
  • C

  • 0wN3r
  • 1288 Aufrufe 12 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem mit double

    Hi, bitte um Hilfe:

    Will eine sehr hohe Primzahl (im 10 oder 100 Milliardenbereich) berechnen

    :)

    Quellcode

    1. #include <stdio.h>
    2. int main()
    3. {
    4. double z=1;
    5. int pruefen=0;
    6. int x;
    7. int i;
    8. for(i=0;i<10000000;i++)
    9. {
    10. for (x=2;x<=(z/2);x++)
    11. {
    12. if (z % x == 0)
    13. {
    14. pruefen = 1;
    15. break;
    16. }
    17. }
    18. switch (pruefen)
    19. {case 1: break;
    20. case 0: printf("%lf",z);break;}
    21. z++;
    22. pruefen=0;
    23. }
    24. return 0;
    25. }
    Alles anzeigen
  • Dazu habe ich einen guten Tipp:
    BlueGene ? Wikipedia.

    Aber ernsthaft, was ist das Problem?
    Es ist einfacher eine Antwort zu schreiben, wenn der Text eine Frage enthält :).

    Es macht aber Sinn sich mit etwas ausgefeilteren Algorithmen zu befassen, da bei zunehmender Größe der Primzahl die Laufzeit doch etwas länger wird.
    Das Sieb des Eratosthenes ist ein guter Einstieg: de.wikipedia.org/wiki/Sieb_des_Eratosthenes.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von wasawasa ()

  • Naja, double ist nicht gerade der geeignetste Datentyp fuer Primzahlen. ;)
    (% und vllt. ++ bereiten hier wahrscheinlich Probleme.)
    Und auch sonst solltest du das z lieber weglassen, i erfuellt bereits den gewuenschten Zweck.

    Quellcode

    1. #include <stdio.h>
    2. int main() {
    3. int pruefen;
    4. long long int i;
    5. long long int j;
    6. printf("Primzahlen:\n");
    7. for (i=10000000;i<100000000;i++) {
    8. pruefen = 0;
    9. for (j=2;j<=(i/2) && !pruefen;j++) {
    10. if (i%j == 0) pruefen = 1;
    11. }
    12. if (!pruefen) printf("%d\n",i);
    13. }
    14. return 0;
    15. }
    Alles anzeigen


    Allerdings faengts wie du siehst bei 10 Millionen an und nicht bei 10 Milliarden, da so eine stupide Iteration, wie wasawasa schon sagte, bei so grossen Zahlen keinen Sinn macht.
    Wo ist der Discord Server

    Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von Skyte ()

  • Da irgendwann auch der Datentyp long long begrenzt ist, sollte man an dieser Stelle auch auf geeignete Biblitheken für "unendlich" große Zahlen hinweisen. Beispiele:

    Wobei ich nicht genau weiß, inwiefern du an reines C gebunden bist und ob die genannten C++ Libs daher für dich in Frage kommen. In jedem Fall sollten sich aber auch andere Angebote finden, die in normalem C geschrieben sind.
  • ja genau, meine frage war eigenlich warum der Datentyp double bei % problemen macht...

    Doch eigentlich müsste es doch genauso mit double gehen, oder?
    wieso macht das Probleme bei Primzahlen?

    danke Skyte, sowas in der art brauch ich!:blink:
    und fuer die links :)


    hab da noch ne frage...

    ihr werdet ja nicht nur mit c programmieren, aber ich will jetzt erstmal c richtig lernen!
    die meisten Schulen verwenden ja das eher veralterte microsoft visual c++6.0

    ich hab mir mal das Microsoft Visual C++ 2008 Express Edition geladen, aber weiß jetzt nicht, wie man damit reine c programme erstellt, also konsolenanwendungen und c++ quellcodedateien.:confused:

    Wär erfreut mit dem neueren Programm zu arbeiten

    mfg
  • 0wN3r schrieb:

    also denkt der compiler es wär ne gleitkommerzahl


    Ja selbstverstaendlich denkt er das, du hast es ihm ja selbst gesagt!
    double Variablen sind halt Gleitkommazahlen!

    Und selbst wenn es gerade einer Ganzzahl entspricht, also z.b.

    Quellcode

    1. double a = 2.0;

    Dann ist es trotzdem ne Gleitkommazahl.
    Wo ist der Discord Server
  • Nein, jeder aktuelle C++ Compiler beherrscht eigentlich auch normales C. Du kannst also ruhig die 2008er Express-Version verwenden. Für manche Dinge liebe ich aber Visual Studio 6 immer noch, nämlich wenn es darum geht, möglichst kleine und von Zusatzbibliotheken unabhängige, native Windowsprogramme zu erstellen. Für größere Projekte gibt es aber mit den neuen Versionen von Visual Studio weitaus komfortablere Eintwicklungsumgebungen, die man im Allgemeinen auch vorziehen sollte ;)