Bug bei Float Variablen?

Fragen und Bugreports zur PureBasic 4.0-Beta.
bommelid
Beiträge: 17
Registriert: 03.04.2006 22:22

Bug bei Float Variablen?

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Das ist normal :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
bommelid
Beiträge: 17
Registriert: 03.04.2006 22:22

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Normal bei Float auf Computer :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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)
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Naja, ... schön sind da ja die sehr präzisen Decimals von C# ... aber vielleicht kommen die ja auch irgendwann einmal. :D
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

DarkDragon hat geschrieben:Ich kann dir die BigNum lib empfehlen.
Naja, .... aber von Performance reden wir dann dabei nicht ... oder? :D
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Zuletzt geändert von Kaeru Gaman am 21.08.2006 12:52, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Gesperrt