Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Einfache Addition und Multiplikation ohe Fehler möglich?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 07.04.2006, 12:12    Titel: Einfache Addition und Multiplikation ohe Fehler möglich? Antworten mit Zitat

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 peinlich

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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Stormy



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

BeitragVerfasst am: 07.04.2006, 13:21    Titel: Antworten mit Zitat

Ist doch logisch. Die Variablen sind einfache Integers. Probier Single oder Double aus und es dürfte gehen.
_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 07.04.2006, 14:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 07.04.2006, 14:19    Titel: Antworten mit Zitat

Vielleicht ein an dieser Stelle noch lesenswerter Artikel:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Gleitkommazahlen.html
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 07.04.2006, 17:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 07.04.2006, 17:59    Titel: Danke für die Antworten.... Antworten mit Zitat

... 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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 07.04.2006, 18:29    Titel: Antworten mit Zitat

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
Code:
FOR i = 1 TO 10


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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 07.04.2006, 21:27    Titel: Antworten mit Zitat

@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 lächeln

jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 11.04.2006, 16:17    Titel: Antworten mit Zitat

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 happy
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 11.04.2006, 17:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 12.04.2006, 14:09    Titel: Antworten mit Zitat

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! grinsen Gibt's denn so was schon in PC?

Es gibt übrigens Beispiele, daß VB4 schwächer rechnet als VB3


Nils lächeln
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 12.04.2006, 14:32    Titel: Antworten mit Zitat

128 Bit durchgeknallt
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz