Double und nachkommastellen (wieso hab ich nur 6?)

hallo,

ich hab da ein kleines (compiler?) problem…

und zwar gibt mir mein pogramm nur 6 kommastellen bei nem double aus, laut meinem buch müssten es aber 15 sein. das schlimme dran ist, dass das ganze am ende auch noch gerundet wird, dadurch ist das ergebnis total unbrauchbar…

ich weiss zwar das ich ne genauere ausgabe erzwingen kann, aber warum bekomme ich z.b. nur diese 6 stellen raus, obwohl da deutlich mehr sind?
liegt das evtl. an einer einstellung oder am compiler selbst?

os ist winxp, und prog ist microsoft visual c++ 6.0
mfg

Auch hallo.

ich weiss zwar das ich ne genauere ausgabe erzwingen kann,
aber warum bekomme ich z.b. nur diese 6 stellen raus, obwohl
da deutlich mehr sind?
liegt das evtl. an einer einstellung oder am compiler selbst?

Also ein Einblick in den Quellcode könnte nicht schaden :wink:
Evtl. liegt nur ein Tippfehler vor ?

os ist winxp, und prog ist microsoft visual c++ 6.0

Und die Buchbeispiele basieren auch auf dieser Plattform ?

mfg M.L.

also worauf das buch basiert, weiss ich eigentlich gar nicht :confused:

den code habe ich leider net zu hand, bin gerade noch in der schule.
aber als simples beispiel (macht mein compiler übrigends auch falsch):

double d=0.999999; cout ausgabe: 0.999999

und wenn eine stelle dazu kommt:

double d=0.9999999; cout ausgabe: 1

mfg

Hallo,

den code habe ich leider net zu hand, bin gerade noch in der
schule.
aber als simples beispiel (macht mein compiler übrigends auch
falsch):

double d=0.999999; cout ausgabe: 0.999999

und wenn eine stelle dazu kommt:

double d=0.9999999; cout ausgabe: 1

Das ist höchstwahrscheinlich kein Compilerfehler, lediglich die Rundung der Ausgabe.

Ich habe das ganze mal mit gcc und C (statt C++) getestet, da geht das:

include 

int main(int argc, char\*\* argv){
 double d=0.9999999999;
 printf("%e, %e\n", d, 1.0-d);
}

Und ausgeführt:
1.000000e-00, 1.000000e-10
An der zweiten Ausgabe sieht man, dass es kein Rundungsfehler in der internen Darstellung sondern nur in der Ausgabe ist.

Ich kann mir nicht vorstellen, dass das mit dem MS-Compiler sehr viel anders ist.

Grüße,
Moritz

hallo,

ich hab da ein kleines (compiler?) problem…

Hallo

  1. RTFM
  2. cout.precision(2); setzt die Stellenzahl für die Ausgabe fest, das hat nichts mit float oder double zu tun. Offensichtlich ist bei dir 6 der Standardwert, was ja auch sinnvoll ist.

Gruss Reinhard

RTFQ^^

cout.precision() kenne ich schon, habe ich aber auch geschrieben^^

die frage ist eben, wieso bei mir nur 6 stellen gehen, alles darüber wird einfach gerundet?
normalerweise sollte ich doch was in form von 1.000000e-00 bekommen…

ist halt nur witzlos, ich berechne einen wert der sich der 1 nährt, aber NIEMALS die 1 erreichen kann…
und nach 6 nachkommastellen bekomme ich die 1:wink:

hab schon meinen code bei nem bekannten probiert (selbes os, selbe prog(incl. version) und auch default einstellungen), und da macht der alles richtig o_O