floats als Brüche
-
Hallo,
für eine Geradenvergleichprogramm (G = S1 + T*R) berechne ich den Wert S1 und vergleiche ihn mit S2 einer anderen Geraden.
Nun habe ich das Problem, dass wenn ich für S1 = 2/3 errechne, der PC dies in 0.666667 umwandelt. Dadurch wird der Vergleich ungenau und der PC gibt keinen Schnittpunkt uas.
Gibt es eine Möglichkeit, dass ich den float als Bruch bekomme ODER das beim Vergleich kliene ABweichungen berücksichtigt werden?
Gruß,
Thracian
-
Nein, gibt es nicht - aber du könntest dir eine eigene Klasse für Brüche schreiben und mit denen rechnen (ist etwas Aufwand - aber mit etwas Geschick findest du auch etwas passendes im Netz).
-
OK, danke.
Schade, dass das nicht geht.
-
Bei floats kannst du die Gleichheit testen, indem du eine epsilon-umgebung betrachtest, also in deinem fall
float eps = 0.0001; // oder kleiner, größer nach wunsch // Betrag des Abstands testen if (fabs(s1 - s2) <= eps) { ... };
-
Danke,
aber was meinst du mit fabs?
sry, für de dumme frage schon mal im voraus
-
fabs ist die float-Version zu abs.
Also Berechnung des (absoluten) Betrags einer Zahl.
-
ich glaub das dein pc weniger probleme mit 2/3 hat weil es für ihn keine periodische zahl ist, wie im dezimal system, er rechnet im dual system
für ihn wird es eher schwer oder ein problem 1/10 dazustellen weil dies im dual system eine periodische zahl also wie 1/3 im dezimal system
und ich glaub kaum das wenn du deinen pc über eienen vergleichsopperator die zwei zahlen vergleicht das er ein problem
du kannst dir auch die mühe machen und eine klasse oder funktion schreiben die dann die brüche erstellt und mit einander vergleicht