Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit Nachkommastellen bei Float-variablentyp

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 <
000
12.01.2004, 17:32 Uhr
Nowitzki



Hi Ihr Spezialisten,
habe mal wieder ein Problem und nur Ihr könnt mir helfen!!!
In meinem Programm wird ein Wert berechnet und in einer Variablen vom Typ „float“ gespeichert und zwar mit 15- Nachkommastellen. Da ich diesen Wert für die Suche in einem Array benutze, sollte der Variabelenwert nicht mehr als 3 Nachkommastellen haben.
Wie kann ich die Nachkommastellen auf 3 begrenzen? Hat vielleicht jemand eine Idee?
Danke im Voraus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.01.2004, 17:52 Uhr
ao

(Operator)


@Nowitzki:
Du kannst runden:

C++:
float f = 1.23456789012345; /* ganz viele Nachkommastellen */

/* jetzt runden wir */
long i = (long) (f * 1000.0 + 0.5); /* Wert von f in ganzen Tausendsteln (1234 hier) */
f = ((float) i) / 1000.0; /* ... und wieder zurück (1.234, theoretisch) */



Aber Vorsicht: Nicht jede Zahl, die sich als endliche Dezimalzahl darstellen lässt (z.B. 1.234), hat auch eine endliche Darstellung im Binärformat. Es kann passieren, dass 1.234 zu 1.23399999999 oder zu 1.2340000001 wird, da hast du keinen Einfluss drauf.

Darum kannst du nicht bei der Suche im Array mit == direkt vergleichen. Manchmal triffst du, manchmal liegst du aber auch ein Itzelfitzelchen daneben. Du musst float-Vergleiche immer in einer Epsilon-Umgebung machen.

Such mal hier im Forum nach "epsilon", es gab kürzlich einen Thread dazu.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.01.2004, 18:50 Uhr
Nowitzki



Hallo ao,
vielen Dank für die Antwort. Werde mein Problem mit "runden" angehen.
Im Forum habe ich nichts über "epsilon" gefunden.
Gruß Nowitzki
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.01.2004, 19:00 Uhr
Pablo
Supertux
(Operator)


guck dir das mal an: www.fun-soft.de/showtopic.php?threadid=5641&post_start=10&time=

oder www.fun-soft.de/showtopic.php?threadid=5268

www.fun-soft.de/showtopic.php?threadid=5192 (gut)

www.fun-soft.de/showtopic.php?threadid=5105

www.fun-soft.de/showtopic.php?threadid=4600 (gut)

www.fun-soft.de/showtopic.php?threadid=1060
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 13.01.2004 um 19:41 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: