Funktion für Zahlenvergleich
-
bool compare(double a, double b) { if ( a == b ) return true; return false; }aber es gibt schon einen grund warum man für gleitkommazahlen funktionen schreibt
such mal anch gleitkommazahl ungenauigkeit oder ähnlichemkönnte nämlich gut seind ass du a und b vom benutzer eingeben lässt (sagen wir beides mal 5), die vergleichst aber trotzdem false rauskommt...
-
Skym0sh0 schrieb:
bool compare(double a, double b) { if ( a == b ) return true; return false; }Das könnte man auch noch etwas kürzer fassen:
bool compare(double a, double b) { return a == b; }Aber ist wohl auch geschmackssache :).
-
ich hätte ja gedacht, dass noch sowas wie ne toleranz rein soll...
-
Ich bekomme das: error C2601: 'compare': Lokale Funktionsdefinitionen sind unzulässig
Was hab ich zuvor vergesseN?
-
Hab's...
-
Informier dich doch einfach besser über Funktionen. Dieses Copy&Paste bringt es nicht wirklich. Kaum willst du etwas Kleines abändern, weisst du nicht mehr weiter...
-
Frei nach dem Motto: Ich kann nen computer einschalten, jetzt werde ich IT-Spezialist.
-
Mizar schrieb:
Das könnte man auch noch etwas kürzer fassen:
bool compare(double a, double b) { return a == b; }Aber ist wohl auch geschmackssache :).
und wird in 99% der Fälle nicht funktionieren.
Der Vergleich zweier Gleitkomazahlen ist nicht so trivial wie es scheint, denn die Rechengenautigkeit und die damit zusammenhängenenden Probleme macen hierbei eien Strich durch die an sich triviale Rechnung.0.0 wird oft im Rechner als 0.00000000000000000001 dargestellt. Und so ist der == Vergleich stets false obwohl man gerne true hätte.
insofern könnte man den Verleich verallgemeinern:
bool equal(const double& v1, const double& v1) { return fabs(v1-v2) < 1.E-15; //15 Nachkommastellen ist i.A. die enauigkeit eines double }Hier ist eine niedirgere Schrank ein der Regel ausreichend (koennte man z.B. ebenfalls übergeben). Okay, aber as ist, wenn man nun floats oder gar long doubles vergleicht??? Die haben eine ganz andere Genaugkeit. In unserem Softwarepaket aben wir eine Reihe traits für verschiedenste Kombinationen drinnen und die equal-, lt-, gt-, .. Funktonen als Template Funktionen implementiert.
-
Von wegen IT-Fachmann. Ich interessiere mich nicht freiwillig dafür - die Uni ist aber der Meinung, dass jeder Studiengang eine Einführung in die Informationstechnik machen solle.
Wenn du dann in der Vorlesung nur hörst, wie toll Linux doch im Vergleich zu Windows ist und die Standard-Computer-Zitate von wegen 64kb Speicher wären gunug für jeden, dann weiß man, dass man nach dem Modul eh nichts richtiges programmieren kann. Im Tutorium bekommst du 30 Minuten was vorprogrammiert, dann 60 Minuten geordnetes Chaos.
Und weil mein Schwerpunkt ganz woanders liegt, werde ich auch weiterhin den Aufwand so niedrig wie möglich halten. Dafür gibt es ja Foren.
Im Übrigen finde ich das mit der Copy/Paste-Lösung gar nicht so schlecht, weil das das Grundgerüst ist, um das ich dann den Rest zusammenbastel.
-
muffmolch schrieb:
Mizar schrieb:
Das könnte man auch noch etwas kürzer fassen:
bool compare(double a, double b) { return a == b; }Aber ist wohl auch geschmackssache :).
und wird in 99% der Fälle nicht funktionieren.
Der Vergleich zweier Gleitkomazahlen ist nicht so trivial wie es scheint, denn die Rechengenautigkeit und die damit zusammenhängenenden Probleme macen hierbei eien Strich durch die an sich triviale Rechnung.0.0 wird oft im Rechner als 0.00000000000000000001 dargestellt. Und so ist der == Vergleich stets false obwohl man gerne true hätte.
Hmm, bei mir hatte es bisher immer geklappt, aber ich habe mich auch nicht so tiefgehend wie du damit auseinandergesetzt, weshalb ich auch annahm das der Vergleich tatsächlich so trivial wäre wie er scheint. Nun gut, dann habe ich auch wieder was dazugelernt. Danke dir :).
-
kein thema. aber ich muss mich berufswegen mit dem vergleich von zahlen auseinander setzen. in der numerischen stömungsmechanik bleibt sowas nicht aus. aber an sich ist es kein grosses thema. für den "hausgebrauch" reicht der vergleich der differenz der beiden zahlen gegen ein defininiertes epsilon.
-
David II schrieb:
Und weil mein Schwerpunkt ganz woanders liegt, werde ich auch weiterhin den Aufwand so niedrig wie möglich halten. Dafür gibt es ja Foren.
Das ist aber nicht gerade eine respektvolle Haltung. Dieses Forum ist dazu da, bei Problemstellungen zu helfen, also konkrete Fragen zu beantworten. Normalerweise wirst du nicht für jedes Problem einen fertigen Quellcode erhalten, deshalb solltest du das auch nicht erwarten.
David II schrieb:
Im Übrigen finde ich das mit der Copy/Paste-Lösung gar nicht so schlecht, weil das das Grundgerüst ist, um das ich dann den Rest zusammenbastel.
Nur wäre es natürlich gut, wenn man auch verstehen würde, was im Grundgerüst genau passiert. Denn wie bereits angetönt, wirst du beim nächsten ähnlichen Problem wieder steckenbleiben, wenn du jetzt die Grundlagen nicht lernst. Und glaub mir, das nächste Problem wird nicht lange auf sich warten lassen...