# Geradengleichung berechnen - falsches Ergebnis



## jojomp (16. April 2008)

Hallo zusammen,

ich habe ein Problem beim Berechnen der Geradengleichung bei zwei gegebenen Punkten. Die Formel dafür ist klar, aber bei der Berechnung tritt ein seltsamer Fehler auf. Hier erst mal die Funktion:

```
void geradengleichung(int points[2][2]) {
	float y2=points[1][1], y1 = points[0][1];
	float x2=points[1][0], x1 = points[0][0];
	// Geradengleichung ermitteln: f(x) = mx + n
	
	float m,n;
	
	m = (y2 - y1) / (x2 - x1);
	n = y2 - (m*x2);
	printf("m=%f  n=%f\n",m,n);
}
```
Wenn ich das mit folgenden Werten rechnen lasse...
Punkt 1: x=2.5
Punkt 1: y=5.5
Punkt 2: x=3.5
Punkt 2: y=4.5

... kommt das raus:
m=-1.000000  n=7.000000

n solte ja eigentlich 8 sein oder irre ich mich da?

Gruß
jojomp

P.S.: Viele kennen die Formel warscheinlich eher als f(x) = ax + b

Edit: Ich habe gerade festgestellt, dass der Fehler nur bei Zahlen mit Nachkommastellen auftritt. n sollte -1 sein, die Funktion berechnete 0.


----------



## Online-Skater (16. April 2008)

Hallo 

vielleicht sollte dein Funktionsparameter auch den Datentyp *float* erhalten 
Normalerweise sollte der Compiler das auch ankreiden, da die Typen verschieden sind !

mfg


----------



## jojomp (17. April 2008)

Super, nach dem Anpassen der Datentypen und atof() statt atoi() hat alles funktioniert! Klar, bei Ganzzahlen rundet er und das produziert Fehler. Der Compiler hat nix angekreidet, weil ich ihn ohne die -Wall Option gestartet hab.

Gruß jojomp


----------



## Onkel Schuppig (22. April 2008)

Vorsicht. Wenn x1 = x2 ist bekommst du "division by zero".


----------

