Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
HD
Anmeldungsdatum: 14.11.2015 Beiträge: 35 Wohnort: Polen
|
Verfasst am: 19.02.2017, 20:24 Titel: Hilfe! Mein Computer kann nicht rechnen. |
|
|
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 |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 19.02.2017, 21:23 Titel: |
|
|
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 |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 19.02.2017, 23:18 Titel: |
|
|
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 |
|
|
HD
Anmeldungsdatum: 14.11.2015 Beiträge: 35 Wohnort: Polen
|
Verfasst am: 20.02.2017, 08:55 Titel: Vielen Dank fuer die Antworten! |
|
|
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 20.02.2017, 10:15 Titel: |
|
|
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 |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
|
HD
Anmeldungsdatum: 14.11.2015 Beiträge: 35 Wohnort: Polen
|
Verfasst am: 21.02.2017, 08:36 Titel: |
|
|
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 |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4601 Wohnort: ~/
|
Verfasst am: 22.02.2017, 17:22 Titel: |
|
|
Wenn du ihn nicht "Rechner" nennen kannst, dann wohl auch nicht "Computer" (computare = berechnen) 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. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
HD
Anmeldungsdatum: 14.11.2015 Beiträge: 35 Wohnort: Polen
|
Verfasst am: 24.02.2017, 15:40 Titel: |
|
|
Hallo nemored,
habe Deinen Vorschlag aufgenommen. Das ist fuer mich die beste Loesung. Danke! |
|
Nach oben |
|
|
|