Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
fuckroot
Anmeldungsdatum: 26.05.2010 Beiträge: 10
|
Verfasst am: 26.05.2010, 22:51 Titel: Rundungsfehler bei DOUBLE |
|
|
Hallo!
Kann mir jemand sagen wie ich auf das richtige Resultat (6) komme, ohne den Typ zu ändern?
DIM d AS DOUBLE
d=216
d=d^(1/3)
gibt 5.999... statt 6. |
|
Nach oben |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 26.05.2010, 22:54 Titel: |
|
|
Seit wann ergibt (1/3) eine ganze Zahl.
Gruss
Zuletzt bearbeitet von funkeld am 26.05.2010, 23:02, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
fuckroot
Anmeldungsdatum: 26.05.2010 Beiträge: 10
|
Verfasst am: 26.05.2010, 22:56 Titel: |
|
|
funkeld hat Folgendes geschrieben: | Seit wann ergibt (1/3) eine ganze Zahl???
Gruss |
seit ewig.
6*6*6 = 216, also ist die 3. Wurzel daraus 6. |
|
Nach oben |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 26.05.2010, 22:56 Titel: |
|
|
ha...ha..., du bist kein "Pisa-Schüler" ???
Gruss |
|
Nach oben |
|
 |
fuckroot
Anmeldungsdatum: 26.05.2010 Beiträge: 10
|
Verfasst am: 26.05.2010, 23:00 Titel: |
|
|
Lol, ich nix Schüler, versteh den Witz grad nicht. Weisst du wie ich das richtige Resultat bekomme? |
|
Nach oben |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 26.05.2010, 23:04 Titel: |
|
|
Code: |
DIM d AS DOUBLE
d=216
d=d^(1/3)
PRINT CINT(d)
Sleep
|
Gruss |
|
Nach oben |
|
 |
fuckroot
Anmeldungsdatum: 26.05.2010 Beiträge: 10
|
Verfasst am: 26.05.2010, 23:05 Titel: |
|
|
Ah, super, Danke!! |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
fuckroot
Anmeldungsdatum: 26.05.2010 Beiträge: 10
|
Verfasst am: 26.05.2010, 23:16 Titel: B |
|
|
Ah, sehr gut, Danke, werd ich gleich mal durchlesen.
Ich will eigentlich prüfen, ob das Resultat eine Natürliche Zahl ist. Das geht mit CINT und PRINT USING glaubs nicht. Kann ich das irgendwie anders lösen?
EDIT: Hab mein Beispiel soeben in GWBASIC versucht zu machen und weil es dort kein DOUBLE gibt SINGLE genommen. Mit diesem Typ geht's, auch in FB. Allerdings ist SINGLE zu klein.
Gibt es in FB Bibliotheken mit anderen Zahlen-Datentypen? Ich hab nur eine für hyperkomplexe Zahlen gefunden - zu viel des Guten.
EDIT 2: Ups, in GWBASIC gibt's natürlich auch DOUBLE. Damit gibt's ein von QB und FB verschiedenes Resultat.
Zuletzt bearbeitet von fuckroot am 27.05.2010, 01:10, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 26.05.2010, 23:41 Titel: |
|
|
du kannst zum beispiel prüfen, ob das was hinterm komma steht absolut kleiner als 0.000000001 ist, und das dann einfach davon ausgehen dasses ne natürliche zahl ist und nur ein rundungsfehler vorliegt. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
fuckroot
Anmeldungsdatum: 26.05.2010 Beiträge: 10
|
Verfasst am: 26.05.2010, 23:46 Titel: |
|
|
Hm, ja, stimmt, das sollte gehen. Danke! |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 26.05.2010, 23:48 Titel: |
|
|
fuckroot hat Folgendes geschrieben: | funkeld hat Folgendes geschrieben: | Seit wann ergibt (1/3) eine ganze Zahl???
Gruss |
seit ewig.
6*6*6 = 216, also ist die 3. Wurzel daraus 6. |
1/3 kannst du aber nicht als kommazahl darstellen, und freebasic kann nicht mit brüchen umgehen. da steckt schon was dahinter. ein computer kann halt nicht beliebig genau arbeiten bei kommazahlen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
fuckroot
Anmeldungsdatum: 26.05.2010 Beiträge: 10
|
Verfasst am: 27.05.2010, 00:17 Titel: |
|
|
Hm, es scheint mir doch Freebasic spezifisch zu sein - QBASIC 4.5 gibt zumindest das richtige Result. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.05.2010, 00:33 Titel: |
|
|
Eigentlich sollte, sofern das gleiche Rundungsverfahren verwendet wird, unter QB genau das gleiche rauskommen. Das Rundungsverfahrung kann theoretisch über ASM-Befehle festgelegt werden, aber ich glaube FB hat da auch einen Kommandozeilen-Switch, wie präzise die Gleitkommaoperationen sein sollen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
fuckroot
Anmeldungsdatum: 26.05.2010 Beiträge: 10
|
Verfasst am: 27.05.2010, 00:38 Titel: |
|
|
Aber mit SINGLE geht es in FB ja - Wieso sollte SINGLE präziser als DOUBLE sein? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.05.2010, 01:08 Titel: |
|
|
Es sieht für dich präsizer aus, aber es ist weiter weg vom erreichneten (falschen) Ergebnis. Wenn es dir auf genaue Ergebnisse ankommt, ist Gleitkomma absolut fehlt am Platz! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
fuckroot
Anmeldungsdatum: 26.05.2010 Beiträge: 10
|
Verfasst am: 27.05.2010, 01:16 Titel: |
|
|
Ersten Satz versteh ich nicht. Ja, du hast recht was Gleitkomma betrifft, aber in diesem Fall sollte schon das richtige Ergebnis ausgegeben werden. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.05.2010, 12:26 Titel: |
|
|
Ich weiß ja auch nicht 100%ig genau, was da im inneren abläuft, aber es kann gut sein, dass intern 5.999... rauskommt, und das bei SINGLE (wegen kleinerem Datentypbereich) aufgerundet wird, also zu 6. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.05.2010, 12:53 Titel: |
|
|
Richtig.
Beispiel: Als Ergebnis kommt 5.9999999999 raus, als double, was bis zu 10 kommastellen speichert (natürlich nicht ganz genau so in echt, aber das prinzip ist das selbe).
Jetzt kannst du dir entweder:
die double-zahl ausgeben lassen, also 5.9999999999
oder:
du speicherst die zahl vorher in einer single-variable.
Die Single-Variable kann sich nur halb so viele kommastellen merken. Beim speichern in der single-variable werden also die letzten 5 kommastellen abgeschnitten: 5.99999|schnipp|99999. Offensichtlich wird das dann aufgerundet damit weniger fehler entsteht, also kommt als ergebnis 6.00000 raus. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
fuckroot
Anmeldungsdatum: 26.05.2010 Beiträge: 10
|
Verfasst am: 27.05.2010, 13:13 Titel: |
|
|
Ah, ja, das macht Sinn. Aber wieso spuckt QB45 auch bei DOUBLE das richtige Resultat raus?
(Interessant ist das GWBASIC-Ergebnis: 5.999999523162842. Die "SINGLE-Stellen" sind alle 9, der Rest scheint zufällig.)
Hab grad komisches Rundungsverhalten in FB, QB und GW entdeckt:
e! = 5.9999992
print e! ----> 5.999999
e! = 5.9999993
print e! -----> 6
Weiss jemand was da passiert? |
|
Nach oben |
|
 |
|