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:

Hilfe! Mein Computer kann nicht rechnen.

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



Anmeldungsdatum: 14.11.2015
Beiträge: 29
Wohnort: Polen

BeitragVerfasst am: 19.02.2017, 20:24    Titel: Hilfe! Mein Computer kann nicht rechnen. Antworten mit Zitat

Ich gebe ihm Aufgaben, und er errechnet das Ergebnis.
Obwohl die Ergebnisse gleich sein muessten, sind sie es nur manchmal.
Ich gebe eine Zahl ein, und er macht daraus eine andere.
So kann ich nicht arbeiten und niemandem eine Aufgabenkontrolle durch den Computer zumuten. Ich dachte immer, ein Computer sei ein Rechner und nun das!

Bitte schaut euch mal mein Listing an! Was soll ich nun machen?

Code:
DIM shared AS Integer Breite,hoehe,z1
DIM shared AS SINGLE ak,an,nka,r
dim shared as string sz
screeninfo Breite,hoehe
SCREENRES breite,hoehe
Width breite\8,hoehe\8
color 15,1:cls
ak=4.00:r=0.00:nka=4.00:an=4.00
for z1=1 to 10
 r= r+0.04:nka=ak+r   
an=an+0.04
?:?Using"##";z1;:?Using" an =###.##########";nka
?:?Using"##";z1;:?Using" an =###.##########";an
next
?:?"         4.00+4=4.4"
getkey:end
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 883
Wohnort: Austria

BeitragVerfasst am: 19.02.2017, 20:52    Titel: Antworten mit Zitat

Kurze Antwort: Runden. Und niemals auf exakte Werte vergleichen.

Ein Computer rechnet nicht symbolisch und auch nicht in Dezimaldarstellung. Deswegen musst du immer beachten dass es zu minimalen Abweichungen vom exakten Ergebnis kommen kann.

Ich würde weiterführende Lektüre zu Gleitkommazahlen am PC empfehlen, z.B. diese:
https://www.elektronik-kompendium.de/sites/dig/1807231.htm
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1845
Wohnort: D59192

BeitragVerfasst am: 19.02.2017, 21:23    Titel: Antworten mit Zitat

Hi,
oder einfach "Double" benutzen.
Code:
Dim As Integer breite, hoehe, z1
Dim As Double ak, an, nka, r
ScreenRes 640, 480
ScreenInfo breite, hoehe
Width breite\8, hoehe\16
Color 15,1:Cls
ak=4.00 : r=0 : nka=4.00 : an=4.00
For z1=1 To 10
  r = r + 0.04 : nka = ak+r
  an = an + 0.04
  ?Using"##";z1;:?Using" an =###.##########";nka
  ?Using"##";z1;:?Using" an =###.##########";an
Next

GetKey

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 883
Wohnort: Austria

BeitragVerfasst am: 19.02.2017, 23:18    Titel: Antworten mit Zitat

volta hat Folgendes geschrieben:
oder einfach "Double" benutzen.
Das erhöht zwar die Genauigkeit (bzw. verringert die Ungenauigkeit), aber die Berechnungen unterliegen trotzdem denselben Einschränkungen, da diese bei allen Gleitkommaberechnungen in FB gleichermaßen gelten. Ich würde also dennoch nahelegen sich über das Thema Gleichkommaberechnung am PC zu informieren damit diese beim Programmieren richtig gehandhabt werden.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 29
Wohnort: Polen

BeitragVerfasst am: 20.02.2017, 08:55    Titel: Vielen Dank fuer die Antworten! Antworten mit Zitat

Die angegebene Literatur habe ich mit Erstaunen gelesen.
Dein Ratschlag, Volta, hilft mir von der praktischen Seite.
Mit der Kontrolle

if nka=an then ? " - nka=an" else?" - nka<>an"

habe ich festgestellt,
dass sogar der Computer die Zahlen jetzt als gleich ansieht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1845
Wohnort: D59192

BeitragVerfasst am: 20.02.2017, 10:15    Titel: Antworten mit Zitat

Hi,
ST_W hat recht, auch mit Double treten Ungenauigkeiten auf.
Daran ist die Umwandlung Dualzahl zu Gleitkommazahl schuld.
Um "Gleichheit" fest zu stellen könnte man z.B. ABS(a-b) < Toleranz verwenden.
Code:
Dim As Integer breite, hoehe, z1
Dim As Single ak, an, nka, r, Toleranz = 0.000001
ScreenRes 640, 480
ScreenInfo breite, hoehe
Width breite\8, hoehe\16
Color 15,1:Cls
ak=4.00 : r=0 : nka=4.00 : an=4.00
For z1 = 1 To 10
  r = r + 0.04
  nka = ak+r
  an = an + 0.04
  ?z1;Using" an =###.##";nka
  ?z1;Using" an =###.##";an;
  if Abs(nka-an) < Toleranz then
    ? " - nka=an"
  Else
    ? " - nka<>an"
  EndIf
Next

GetKey

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


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

BeitragVerfasst am: 20.02.2017, 21:43    Titel: Antworten mit Zitat

An dieser Stelle auch ein Artikel aus meiner berühmten Sammlung:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Gleitkommazahlen.html

Gilt alles für FreeBasic nach wie vor genauso!
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 29
Wohnort: Polen

BeitragVerfasst am: 21.02.2017, 08:36    Titel: Antworten mit Zitat

Hi,
dank volta kann mein computer jetzt wieder richtig rechnen, aber ich werde ihn nie mehr rechner nennen. Das habe ich der empfohlenen literatur entnommen.
Danke fuer die hervorragenden Informationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4131
Wohnort: ~/

BeitragVerfasst am: 22.02.2017, 17:22    Titel: Antworten mit Zitat

Wenn du ihn nicht "Rechner" nennen kannst, dann wohl auch nicht "Computer" (computare = berechnen) grinsen Der Computer rechnet durchaus richtig, aber du zwingst ihn zum Runden, und dabei entstehen eben Rundungsfehler.

Vermeiden lassen sich die Rundungsfehler übrigens auch, wenn stattdessen mit Ganzzahlen gerechnet wird. Wenn du z. B. generell mit zwei Nachkommastellen arbeitest, kannst du auch durchgängig mit dem hundertfachen Wert rechnen (also dann mit Ganzzahlen) und nur für die Ausgabe das Komma an der richtigen Stelle dazwischen schieben. Für Buchhaltungssoftware u. ä. gibt es dafür oft einen eigenen Datentyp, der dann z. B. Currency genannt wird.
_________________
Meine Großeltern waren als junge Menschen sehr modern - sie hatten schon damals in der Badewanne Email.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 29
Wohnort: Polen

BeitragVerfasst am: 24.02.2017, 15:40    Titel: Antworten mit Zitat

Hallo nemored,
habe Deinen Vorschlag aufgenommen. Das ist fuer mich die beste Loesung. Danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. 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