Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 07.04.2006, 12:12 Titel: Einfache Addition und Multiplikation ohe Fehler möglich? |
|
|
Addiere oder multipliziere ich kleine Zahlen. dann gibt's sofort Fehler! Ich hab mal ein Beispiel gemacht:
clear
u= .00001
for i=0 to 10 step
c= i*u
d=d+u
e=c*(1/u)
f=d*(1/u)
print u,c;d;e;f
next
end.
Ausgaberundung durch print using "#,#####" bringt nichts, da ja doch mit den krummen Zahlen gerechnet wird.
Sind das unvermeidbare Fehler oder kann man da was (verbessern) machen?
Nils
p.s.: Warum geht mit die Formatierung des Programms flöten? _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 07.04.2006, 14:16 Titel: |
|
|
Ein DEFDBL A-Z sollte es bringen denke ich...
PS: Das Problem ist, dass du Code-Tags in diesem Forum verwenden solltest.
Benutz einfach den folgenden BBCode:
[code]
' Dein Code...
[/code]
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
Thomas Antoni

Anmeldungsdatum: 12.10.2004 Beiträge: 220 Wohnort: Erlangen
|
Verfasst am: 07.04.2006, 17:37 Titel: |
|
|
Bitte bei solchen 100-fach bereits gestellten und beantworteten Einsteigerfragen immer erst die QB-MonsterFAQ um Rat fragen.
Dort findest Du unter http://www.antonis.de/faq/qbmonfaq-Dateien/1406661307.html genau die Antwort auf Deine Frage. _________________ +++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++ |
|
Nach oben |
|
 |
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 07.04.2006, 17:59 Titel: Danke für die Antworten.... |
|
|
... Thomas: Hab ich zuvor gelesen und gewußt, Thomas! Ich weiß aber ja nicht, ob das auf die Gleitkommarechnungen zurückzuführen ist.
Deshalb scheitet der Zähler einer for...next Schleife auch einen Schritt zuweit?
Gibt es Ausgleichsalgorithmen um den Fehler zu minimieren?
... jb: Code tags? Ich verstehe nicht!
... Stormy: das passiert dann auch! Hast Du es nicht versucht?
Wenn ich recht verstehe ist das dem rechner geschuldet nicht QB?
Nils _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 07.04.2006, 18:29 Titel: |
|
|
Dein Code hat einige kleine Fehler.
Hier eine Korrektur:
Code: | CLS
u = .00001
FOR i = 0 TO 10
c = i * u
d = d + u
e = c * (1 / u)
f = d * (1 / u)
PRINT u, c; d; e; f
NEXT
END |
Die For Next Schlaufe zählt richtig und zwar von 0 bis 10 was 11 Schritten entspricht.
Du willst wahrscheinlich
Das 0.7 falsch dargestellt wird, liegt am Rechner beziehungsweisse dessen Aufbau.
Als Lösung bittet sich runden an:
Code: | CLS
u = .00001
FOR i = 1 TO 10
c = i * u
d = d + u
e = c * (1 / u)
f = d * (1 / u)
PRINT rund(u), rund(c); rund(d); rund(e); rund(f)
NEXT
END
FUNCTION rund (x)
rund = CLNG(x * 100000) / 100000
END FUNCTION |
Zu den Code tags:
Das must du im Forum eingeben damit der Quellcode in diesen weisen Boxen mit grüner Schrift erscheint. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 07.04.2006, 21:27 Titel: |
|
|
@Nils: Wenn ich richtig verstanden habe, was dein Problem unter Anderem, dass
dein Code nicht richtig im Forum dargestellt wird.
Wenn du also nun einen Code hast, setzt du *vor* den Beginn den Tag [code] und *nach* Code-Ende den Tag [/code].
Das nennt man dann BBCode
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 11.04.2006, 16:17 Titel: |
|
|
Hi Micheal,
hi jb,
Hab ich doch wieder was gelernt:
Code: | super grüner bb code |
Eigentlich gings mir um die Rechenfehler. Habe nämlich ein Programm in VB gesehen, da schien das besser zu sein. Weiß aber nicht, ob da nur die Anzeige gerichtet wurde.
Nochmal ein teil meiner Frage: Liegt das Problem ausschließlich bei der Hardware oder auch an QB; so daß ein Wechseln zu einer anderen Sprache Rechengenauigkeit bringt?
NILS  _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 11.04.2006, 17:53 Titel: |
|
|
Es liegt an der Hardware, ein wechsel würde aber bedingt etwas bringen.
QBasic ist ein 16 Bit Programm, die Standart Variabel ist also "16 Bit genau".
Genaure Varibeln sind z.B. mit DEFDBL A-Z, möglich dann sind die Rechnungen "32 Bit genau".
32 Bit Programm (z.B. VB oder FB) ist die Standart Variabel "32 Bit genau", genauere "64 Bit genau".
Letzten Endes würde es bei Visual Basic ganz ähnlich aussehen, wenn es die Rechenfehler nicht vor der Ausgabe vertuschen würde.
(Die Vertuschung nimmt so viel ich weiss VB selbst vor, der Programmierer merkt nichts davon)
Jede Programmier Sprache hat so zusagen ein eigenes "Rezept" bei der Ausgabe von Kommazahlen, wirklich genauer Rechnen sie kaum weil die genauigkeit eben von der CPU kommt. |
|
Nach oben |
|
 |
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 12.04.2006, 14:09 Titel: |
|
|
Michael: Hab ich mir schon gedacht. Das runden bringt mir also keinerlei Rechengenauigkeit [mein Code war nur so hingeschrieben weil ich meinen Programmcode nicht posten konnte. Die Schleifen sollten nur schleifen, nicht sinnvoller sein! ]. Aber nach mehreren Rechenoperationen, wenn der gespeicherte Wert ungenauer ist als die Hardware Rechenmöglichkeit, müßte man doch eine Korrektur anbringen können!?
Brauch ich also nen 128 bit Rechner! Gibt's denn so was schon in PC?
Es gibt übrigens Beispiele, daß VB4 schwächer rechnet als VB3
Nils  _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 12.04.2006, 14:32 Titel: |
|
|
128 Bit
Das wäre Theoretisch möglich mit dieser Genauigkeit zu rechnen, aber es macht keinen Sinn.
Zitat: | Es gibt übrigens Beispiele, daß VB4 schwächer rechnet als VB3 |
VB 4 macht die Ausgabe anders als VB 3.
(Die Rechnung macht die Hardware und nicht Basic)
Zudem: VB 4 ist 32 Bit und VB 3 nur 16 Bit.
Zitat: | Aber nach mehreren Rechenoperationen, wenn der gespeicherte Wert ungenauer ist als die Hardware Rechenmöglichkeit, müßte man doch eine Korrektur anbringen können!? |
Für das der Fehler sehr sehr klein ist, ist das wahnsinnig viel Aufwand.
(Zudem: Das Resultat würde besser Aussehen, wäre aber noch Ungenauer)
Verwende besser Formeln, die nicht mit alten Resultaten weiter Rechnen müssen.
Solange du mit Kommazahlen rechnest, wird es Rechenfehler geben, damit muss und kann man leben. |
|
Nach oben |
|
 |
|