![]() |
Lineare Funktion
Hallo,
warum funktioniert dieser Code nicht?
Delphi-Quellcode:
Wenn ich z.B. für m = 0,5 einsetzte und füt t = -1, kommt als y Wert 0 heraus.
round(strtofloat(m.Text)* i + StrToFloat(t.Text));
Die x - und Y-Werte entnehme ich aus Edits. Wenn ich dort 0.5 eingebe, kommt die Meldung: Im Projekt Project1.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: ''0.5' ist kein gültiger Gleitkommawert'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. Wenn ich 0,5 eingebe, kommt keine Fehlermeldung, aber vllt liegt es ja daran, dass o,5 anstatt 0.5 dasteht. Weiss vllt jemand, wie ich dieses Problem lösen kann? Gruß Spurius |
Re: Lineare Funktion
Ich glaube, es ist so, dass du im Code für Gleitkommawerte das Komma als Punkt (.) schreiben musst, in den Edits zur Laufzeit jedoch ein Komma (,) eingeben musst.
|
Re: Lineare Funktion
Mach ich ja, nur warum kommt was falsches dabei raus?
|
Re: Lineare Funktion
Zitat:
round(0.5)=1 wie groß ist i ? =1 ? dann: round(0.5)*1+(-1)=1-1=0 ist doch richtig gerechnet! |
Re: Lineare Funktion
aber achtung round() unterliegt dem "Banker’s Rounding" :!:
|
Re: Lineare Funktion
Zitat:
round(0.5 * 1 + -1) = round(-0.5) = 0 -> da Delphi bei +/-n,5 zu n rundet, und wohl nicht zu n+1. Das wird an der immer wieder einfließenden Ungenauigkeit von Fießkommazahlen liegen (0,5000000000000000001 wird grad noch zu 1 gerundet, 0,5 nicht mehr). gruss, Fabian |
Re: Lineare Funktion
Zitat:
Zitat:
|
Re: Lineare Funktion
Hm, und wie kann ich das Problem jetzt lösen?
|
Re: Lineare Funktion
Zitat:
Zitat:
Normalerweise wird zur nächsten ganzen Zahl gerundet, egal ob gerade oder ungerade. Da von n,5 aus aber beide umgebenden ganzen Zahlen gleich "weit weg" sind, hat man in der Mathematik definiert: n,5 wird zu n+1 gerundet. Bänker, Kaufleute und so weiter machen das z.T. anders. Also scheint Delphi bei n,5 abzurunden, obwohl das lt. mathematischer Definition nicht korrekt wäre. Bei den Bänkern dann wohl schon ;). |
Re: Lineare Funktion
stimmt hast recht, das mit der geraden ganzen zahl bezieht sich auf die mitte!
d.h.: round(3.5)=4 round(4.5)=4 gruß rené ps.: zwar ist 0 keine gerade zahl, aber es wird so interpretiert! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz