Seite 1 von 4

Bug bei Float Variablen?

Verfasst: 21.08.2006 09:42
von bommelid
Ist es normal, daß bei Float Variablen niocht der genaue Wert angezeigt wird? Sollte meiner Meinung nach nicht so sein.

Code: Alles auswählen

wert.f = 1.34
Debug wert
Bei mir wird da 1.3400000333786 angezeigt.

Gruß
bommel

Verfasst: 21.08.2006 09:47
von ts-soft
Das ist normal :wink:

Verfasst: 21.08.2006 10:02
von bommelid
Normal bei PureBasic oder allgemein normal?
Kann mich nicht erinnern, daß das bei C oder Pascal auch so ist. Werd ich aber heute abend mal testen.

Gruß
bommel

Verfasst: 21.08.2006 10:05
von ts-soft
Normal bei Float auf Computer :mrgreen:

Verfasst: 21.08.2006 10:45
von DarkDragon
Das ist kein Bug, das ist normal so, wegen Mantisse, Charakteristik etc. In C oder wo auch immer kann es sein, dass entsprechende Float to String casting Funktionen(String ist bei denen sowieso oftmals kein standardmäßiger Datentyp bei C, Java, ...) intelligent abschneiden. Das würde ich aber nicht empfehlen, wegen performanceeinbußen, etc. wenn man es desöfteren benötigt.

Code: Alles auswählen

wert.f = 1.34
Debug StrF(wert, 2)
Debug StrF(wert, 6)
Debug StrF(wert, 10)
Debug StrF(wert, 15)
Debug StrF(wert, 100)

Verfasst: 21.08.2006 11:41
von Kaeru Gaman
falls du mit einer bestimmten anzahl Nachkommastellen arbeiten willst,
kannst du auch mit Fixkomma arbeiten.

wenn du z.b. Geldbeträge kalkulieren willst, rechnest du mit zehntel-Cent,
bzw. mit hundertstel-Cent (für Zinsrechnungen), aber eben als Ganzzahl.
für die darstellung musst du dann nur den internen Wert mit einem komma
an der richtigen stelle versehen, um Euro anzuzeigen.

es gibt viele bereiche, wo sowohl ganzzahl als auch float sauber funktionieren,
dort hängt es dann an der vorliebe des programmierers, was er nimmt.
aber ein einigen teilbereichen ist klar das eine oder das andere vorzuziehen.

Verfasst: 21.08.2006 12:33
von PureLust
Naja, ... schön sind da ja die sehr präzisen Decimals von C# ... aber vielleicht kommen die ja auch irgendwann einmal. :D

Verfasst: 21.08.2006 12:38
von DarkDragon
PureLust hat geschrieben:Naja, ... schön sind da ja die sehr präzisen Decimals von C# ... aber vielleicht kommen die ja auch irgendwann einmal. :D
Ich kann dir die BigNum lib empfehlen. Die läuft sogar unter Linux und als source sogar auf MacOS. Die lib rechnet wie in der Grundschule mit Strings. D.h. addieren, subtrahieren, multiplizieren, ... alles mit nummern die so groß sein können wie der RAM es ihnen erlaubt.

Verfasst: 21.08.2006 12:43
von PureLust
DarkDragon hat geschrieben:Ich kann dir die BigNum lib empfehlen.
Naja, .... aber von Performance reden wir dann dabei nicht ... oder? :D

Verfasst: 21.08.2006 12:45
von Kaeru Gaman
für spezielle anwendungen bestimmt nich schlecht.. (gibts da auch source von?)

aber für viele sachen genügt Quad.

der wertebereicht beträgt +/- 9trillionen bei ganzzahl.
wenn du fixkomma mit 6 nachkommastellen verwendest, hast du immer noch +/- 9billionen.
das ist soviel, wie ein Lichtjahr Kilometer hat, das is ne verdammt große zahl.
du könntest also ein koordinatensystem bauen,
das nach links und nach rechts ein volles lichtjahr geht (also insgesamt 2LJ breit),
und dort an jeder stelle millimetergenau rechnen!
... da braucht man keine floats mehr, die eh ungenau sind... ;)

oder ein anderes beispiel:
wenn du Quad als Counter für Millisekunden verwendest,
braucht er über 500 Millionen Jahre! um einmal durchzuzählen.