Zahlen > 10^10 ausgeben

yogiboy

Grünschnabel
Hi,

ich benutze atm lcc und habe da einige Schwierigkeiten grössere Zahlen darzustellen.

...
long double i;
i= 4000000 * 4000000;
printf("%Le",i);
...
Als das Ergebnis wird 1.246822e+009 ausgegeben....
Ich habe mit mehreren Typen versucht, aber entweder Bufferoverflow oder solche komische Ergebnisse...

Kann mir einer sagen wie ein solches Ergebnis zustandekommt und wie ichs richtig machen kann?

thx
 
Hallo

benutzt doch mal nur ne long Variable, ne double Variable ist ja ne Fließkommazahl und dadurch könnten sowas vielleicht passieren.

EDIT:Wobei mir grad eingefallen is das doch ne Long nur 2Byte sind und deine Zahl das sprengen würde...
 
Zuletzt bearbeitet:
Patric_Ho hat gesagt.:
EDIT:Wobei mir grad eingefallen is das doch ne Long nur 2Byte sind und deine Zahl das sprengen würde...

Aha. Auf welcher Architektur ist bitte long = 2 bytes? Das kleinste was ich je hatte war 4 bytes, und das beim avr-gcc. Auf einem x86 sollte es 8 bytes sein.

Zum Thema: Was ist an 1.246822e+009 so komisch? Das ist sehr geläufig und setzt für 1.246822 * 10^9. Ich weiß nicht wie man das bei printf umstellt, schau mal manpages [oder msdn] nach, da steht es sicher. Wenn die Zahl zu groß wird brauchst du eine extra Library, z.B. GMP.
 
Naja 4.000.000 * 4.000.000 sollte irgendwas mit 1.6*10^13 rauskommen.
Das andere Ergebnis mit 1.2468.. blabla kann unmöglich Darstellungsfehler sein...
Ich habe der docs entnommen, dass die long doubles bis +-10^34 darstellen kann,
aber irgendwie krieg ich das nicht gebacken...

Und noch was anderes:

Ich habe 6 verschachtelte for-to-schleifen á i=1-50 für 1 Zeile Multiplikation laufen lassen und es dauert unzumutbar lange.
Für die innerste Schleife bis 50 braucht er ca 5sek....
Man kann sich ausmalen wie lange es bis zum Schluss braucht.....
Ist es normal?
 
Zurück