AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Lineare Funktion

Ein Thema von Spurius · begonnen am 25. Sep 2004 · letzter Beitrag vom 25. Sep 2004
Antwort Antwort
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#1

Lineare Funktion

  Alt 25. Sep 2004, 13:07
Hallo,
warum funktioniert dieser Code nicht?
round(strtofloat(m.Text)* i + StrToFloat(t.Text)); Wenn ich z.B. für m = 0,5 einsetzte und füt t = -1, kommt als y Wert 0 heraus.
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
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Lineare Funktion

  Alt 25. Sep 2004, 13:08
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.
Julian J. Pracht
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#3

Re: Lineare Funktion

  Alt 25. Sep 2004, 13:19
Mach ich ja, nur warum kommt was falsches dabei raus?
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#4

Re: Lineare Funktion

  Alt 25. Sep 2004, 13:32
Zitat von Spurius:
Hallo,
round(strtofloat(m.Text)* i + StrToFloat(t.Text)); Wenn ich z.B. für m = 0,5 einsetzte und füt t = -1, kommt als y Wert 0 heraus.
Die x - und Y-Werte entnehme ich aus Edits. Wenn ich dort 0.5 eingebe, kommt die Meldung:

round(0.5)=1
wie groß ist i ? =1 ?

dann: round(0.5)*1+(-1)=1-1=0 ist doch richtig gerechnet!
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#5

Re: Lineare Funktion

  Alt 25. Sep 2004, 13:35
aber achtung round() unterliegt dem "Banker’s Rounding"
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Lineare Funktion

  Alt 25. Sep 2004, 13:41
Zitat von ibp:
Zitat von Spurius:
Hallo,
round(strtofloat(m.Text)* i + StrToFloat(t.Text)); Wenn ich z.B. für m = 0,5 einsetzte und füt t = -1, kommt als y Wert 0 heraus.
Die x - und Y-Werte entnehme ich aus Edits. Wenn ich dort 0.5 eingebe, kommt die Meldung:

round(0.5)=1
wie groß ist i ? =1 ?

dann: round(0.5)*1+(-1)=1-1=0 ist doch richtig gerechnet!
Vorsicht, das round ist überm ganzen Ausdruck:

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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#7

Re: Lineare Funktion

  Alt 25. Sep 2004, 13:55
Zitat von dizzy:
Vorsicht, das round ist überm ganzen Ausdruck:
.. stimmt hast recht !

Zitat von dizzy:
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).
nein, wie bereits gesagt unterliegt round dem "Banker’s Rounding", d.h. es wird zur nächsten ganzen geraden zahl gerundet!
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#8

Re: Lineare Funktion

  Alt 25. Sep 2004, 14:08
Hm, und wie kann ich das Problem jetzt lösen?
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Lineare Funktion

  Alt 25. Sep 2004, 14:09
Zitat von ibp:
nein, wie bereits gesagt unterliegt round dem "Banker’s Rounding", d.h. es wird zur nächsten ganzen geraden zahl gerundet!
Und wie kommt dann das:
Zitat von ich:
0,5000000000000000001 wird grad noch zu 1 gerundet, 0,5 nicht mehr
Die nächste gerade Zahl von 0,5000000000000000001 aus ist immer noch 0, aber Delphi macht ne 1 draus. Mich würde es auch stark irritieren, wenn z.B. 3,1 zu 4 gerundet würde, da 4 ja näher liegt als die 2, und 3 ist ungerade... Ich glaube, da stimmt was nicht.
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 .
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#10

Re: Lineare Funktion

  Alt 25. Sep 2004, 14:20
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!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz