Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » C: Große ganzzahlige Datentypen » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 3 Beiträge
mathefritz

moderne Compiler ( C99 )
sollten, sogar auf 32Bit-Systemen, den 64-BitTyp long long kennen;
und
da ja keine negativen Werte entstehen, kannst Du auch unsigned long long nehmen
und mit Werten bis 2^64 - 1 rechnen.
eulerscheZahl

Das gibt dir die Maximalwerte aus:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
#include <stdio.h>
#include <limits.h>

int main()
{
    printf("INT_MAX = %d\n", INT_MAX);
    printf("LONG_MAX = %d\n", LONG_MAX);

	getchar();
}

ist bei mir beides 2147483647 (da 32 Bit), bei dir auch?
Fall nicht, versuche mal folgendes:
code:
1:
2:
3:
#include <stdint.h>
...
int32_t beginn,currnr,i,currbisnr;



Zur Implementierung:
es reicht aus, wenn du in Zeile 13 sqrt(currnr) nimmst:
code:
1:
2:
3:
#include <math.h>
...
currbisnr = sqrt((double)currnr);

dann läuft es schneller
nano99 C: Große ganzzahlige Datentypen

Meine Frage:
Hi!

Ich möchte ein C-Programm schreiben, dass alle Primzahlen ab einer bestimmten Zahl ausgibt.
Bis jetzt bin ich so weit:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
#include <stdio.h>

int main()
{
 int geht;
 long beginn,currnr,i,currbisnr;
 scanf("%d",&beginn);
 printf("\n\nAb %d gibt es folgende Primzahlen:\n",beginn);
 currnr=beginn;
 
 while(1)
 {
  currbisnr=currnr/2+1;
  geht=1;
  for(i=2; i<=currbisnr; i++)
  {
   if(currnr%i==0)
   {
    geht=0;
   }
  }
  if(geht==1)
  {
   printf("%d\n",currnr);
  }
  currnr++;
 }
}


Nun mein Problem: Wenn der Zähler bei der Zahl 32000 (oder so) angekommen ist, geht die Zählung plötzlich bei -32000 weiter. Das ist so, weil der Datentyp long nur so weit kommt. Um das Problem zu lösen, habe ich schon versucht, statt "long" "double" zu verwenden. Dann wird mir aber bei der Modulo-Funktion (Zeile 17) der Fehler "Illegal use of floating point" angezeigt, weil Modulo ja nur mit ganzen Zahlen arbeiten kann. Gibt es jetzt irgendeine Möglichkeit, entweder einen riesigen ganzzahligen Datentyp zu verwenden, oder Modulo mit "double" zu verwenden?

Danke schon mal für Antworten smile

Gruß,
nano99

Meine Ideen:
Siehe oben großes Grinsen