> temp = data[0] - (1/4) + (slope[0]-counter[0])/(slope[0]);
Zum einem sind da unnötige Klammern drin, zum anderem musst Du eben mit
float rechnen. ;-)
temp = data[0] - 1.0/4 + (float)(slope[0]-counter[0]) / slope[0];
Immer daran denken: "Punktrechnung vor Strichrechnung" Das gilt auch
für den Compiler.
Der Compiler rechnet immer dann in float, wenn eine Seite der Rechnung
schon in float ist. Aber der Compiler macht auch Punkt-vor-Strich.
D.h. wenn du "1/4" schreibst, macht er eine Integerdivision, bei der
kommt immer 0 raus. Also musst Du "1.0/4" schreiben.
So, das war die erste Teilrechnung, die nach dem Motto "Punkt vor
Strich" vom Compiler durchgeführt wurde.
Nun muss der Compiler "(slope[0]-counter[0])" ausrechnen. Das sind
beides Integerwerte, das kann er also mit Integer machen. Das ist
korrekt.
Dann wird das vorherige Ergebnis durch "slope[0]" geteilt.
"slope[0]" ist aber ein Integer, und der Compiler würde hier also
wieder eine Integer-Rechnung machen. Also musst Du von Hand eine
Argument der Division in float wandeln. Darum das "(float)" vor dem
Klammerausdruck "(slope[0]-counter[0])". Dadurch wird das Ergebnis
der Integersubtraktion in ein Float gewandelt und anschließend als
float durch slope[0] geteilt.
Zum Schluss hat der Compiler noch ein Interger minus ein Float plus ein
Float zu rechnen. Da mindestes ein Argument ein Float ist, wandelt er
den Integer "data[0]" selber in ein Float um.
Das war's! ;-)