Variablentyp Float macht Ärger...

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag von Lars »

@coldarchon
Du willst damit doch wohl nicht etwa sagen, dass es ganz normal sei, dass
man, um zwei Variablen zu vergleichen, selbige erst selber von Hand in
ein sinnvolles Format umwandelt :shock:

Aber lassen wir das geflame, jeder behält vielleivht am einfachsten seine
Meinung und alle sind glücklich :roll:
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

naja, es währe auf jeden fall nett, wenn der compiler eine freundliche warnung ausgeben würde, dass man da grade wahrscheinlich murks macht, so wie das ein guter c compiler tut ^^
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

@ freedimension:

Es geht aber auch darum, dass man eine Bedingung mit Float-WOrd machen könnte, aber wenn man 2 hat und per AND verknüpft, dann geht es nicht mehr. WARUM? Wieso behandelt der Compiler das anders als 2 einzelne Zeilen?
Dass die ständigen Fragen zu "Warum sind Floats ungenau" dich nerven kann ich nachvollziehen, aber hier liegt wohl klar ein Bug vor, wenn er beide Operationen einzeln machen kann, beide mit AND aber nicht. :|
Benutzeravatar
AndyMars
Beiträge: 141
Registriert: 08.09.2004 11:59
Computerausstattung: Win11 Prof 64bit, i5-13500 @ 4.8 GHz, 32GB RAM, Nvidia RTX 4070 TI
Wohnort: Zürich, Schweiz
Kontaktdaten:

Beitrag von AndyMars »

Na, na...
die ewigen Float-Fragen
Es geht hier nicht nur um Floats! Ich kann mit den Restriktionen von den PB Floats durchaus leben, freue mich natürlich auch auf ein PB 4... Der Punkt hier ist meiner Meinung nach aber ein anderer: Ich hätte ja auch nichts dagegen, wenn es so wäre, dass ich Float mit Word (oder Long) nicht vergleichen könnte. Aber offensichtlich scheint es ja doch möglich zu sein, wie die aufgeteilten Vergleiche es ja zeigen - wäre es anders, erwartete ich schon da eine Fehlermeldung oder zumindest ein "seltsames Ergebnis". Aber nein: 100 >= 39.000000 ergibt True... Das scheint mir soweit durchaus korrekt. Aber warum (vereinfacht gesagt) "True AND True" False ergibt - das hat doch nichts mehr mit den Floats zu tun. Oder? :?:

Edit: Tja, tja - Zaphod & Sunny waren schneller /:->. Ich hatte wohl gleichzeitig noch zuviele andere Dinge zu tun...
In Tat und Wahrheit braucht jedes Wort, welches ich schreibe, einige Minuten, um vom Mars zur Erde zu gelangen - deshalb brauch ich immer so lange, um eine Antwort zu schreiben ; )
Grüsse von AndyMars
bvc
Beiträge: 37
Registriert: 09.09.2004 16:02

Beitrag von bvc »

Auch wenn das Thema nervt, wie bekomme ich 38.40 und nicht 38.400002 in meine float variable? (siehe mein Beispiel auf der ersten Seite)
manchmal weiß auch ich etwas, ich erinnere mich bloß schlecht daran
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

freedimension hat geschrieben: Jungs, könnt ihr bitte bitte bitte die Suchmaschine bemühen (auch altes Archiv) bevor ihr immer wieder das alte Thema auf den Tagesplan holt. Oder lest mal zur Abwechslung die Hilfe oder ein gutes Informatikbuch, den Programmieren ist mehr als nur Befehle schreiben, Programmieren ist vor allem eines: Verstanden haben
Was genau war da jetzt nicht zu verstehen?

Suche im alten Forum ergab innerhalb von 1 Minute dieses Ergebnis (viel Spass beim LESEN)

http://www.robsite.de/php/pureboard-arc ... 67&start=0
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

bvc hat geschrieben:Auch wenn das Thema nervt, wie bekomme ich 38.40 und nicht 38.400002 in meine float variable? (siehe mein Beispiel auf der ersten Seite)
auf die Letzte Stelle kannst Du pfeifen

Code: Alles auswählen

wert.f=120 
prozent.f=32 
erg.f=wert*prozent/100 
Debug erg   ; --> 38.400002 
str_erg.s=StrF(erg,2) 
Debug str_erg  ; --> 38.40 
nachkomma.f= ValF("0."+StringField(str_erg,2,".")) 
Debug nachkomma  ; --> 0.400000 
vorkomma.f=Val(StringField(str_erg,1,".")) 
Debug vorkomma  ; --> 38.000000 
erg2.f=vorkomma+nachkomma 
Debug erg2  ; --> 38.400002
Debug "So geht das"
Debug StrF(erg2,5)  ; --> 38.400002
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

@bvc:

da solche kleinen wertunterschiede aber schnell wieder an einer nichtoffensichtlichen stelle flöten gehen, sollte man damit aber garnicht erst rumrechnen.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

freedimension hat geschrieben:
freedimension hat geschrieben: Jungs, könnt ihr bitte bitte bitte die Suchmaschine bemühen (auch altes Archiv) bevor ihr immer wieder das alte Thema auf den Tagesplan holt. Oder lest mal zur Abwechslung die Hilfe oder ein gutes Informatikbuch, den Programmieren ist mehr als nur Befehle schreiben, Programmieren ist vor allem eines: Verstanden haben
Was genau war da jetzt nicht zu verstehen?

Suche im alten Forum ergab innerhalb von 1 Minute dieses Ergebnis (viel Spass beim LESEN)

http://www.robsite.de/php/pureboard-arc ... 67&start=0
Darum geht es doch garnicht! Ich weiß doch dass Floats manchmal ungenau runden. Im gennanten Link geht es doch darum, dass 2 Float Werte ungenau zusammenaddiert werden.
Aber in meinem Fall geht es doch garnicht um Rundungsfehler oder soetwas. Sondern schlichtweg darum, dass 2 If-Bedingungen einzeln funktionieren. Verknüpft mit AND geht es nicht mehr. DIE FLOATS GEHEN DOCH, ICH BESCHWÄRE MICH JA GARNICHT ÜBER RUNDUNGDFEHLER, NUR MAN KANN EBEN NICHT 2 BEDINGUNGEN (EINZELN FUNKTIONIEREN SIE) HINTEREINANDER MIT AND VERKNÜPFEN!
Sorry dass ich das jetzt so sagen muss, aber du verwechselst meine Problematik schlichtweg mit einer anderen. Es geht ja nicht um Rundungsdinge oder Binär-Ungenaueigkeiten sondern um die Tatsache dass es eigentlich geht, (Und PureBasic das auch kann!!), aber wenn man 2 dieser Bedingungen verknüpft tritt ein Fehler auf. (Obwohl man beide doch einzeln betrachten könnte und beiden dann gehen würde. Somit vermischt der Compiler da irgendetwas, was am Ende dann einen Fehler produziert).
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Den Post hast du ja auch nicht dir zu verdanken Sunny, mach dir da mal keine Sorgen ;-)
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Antworten