C ist so definiert, dass int
s durch ganzzahlige Division geteilt wird, und nur wenn es einen Float gibt, "befördert" es zuerst andere int
s zu float
s. Beachten Sie, dass dies sogar passiert, wenn es einem float
zugewiesen wird - wenn die rechte Seite alle int
s ist, dann wird die Division ganzzahlig sein, und nur für die endgültige Zuweisung wird C int
konvertieren Ergebnis zu float
.
Also, mit Ihrer Linie:
%Vor%
Es hängt alles davon ab, was LAB_Fmax
und LAB_Fmin
sind. Es spielt keine Rolle, was freq
oder x
ist, weil der "Schaden" bereits aufgrund der Klammern erfolgt ist, die die Division zuerst zwingen.
Wenn diese LAB_F
Variablen int
s sind, ist der einfachste Weg, die Gleitkommadivision zu verwenden, einfach C zu sagen, dass Sie das wollen, indem Sie die Konstante 255
eine Fließkommazahl anstelle einer Ganzzahl verwenden ein Dezimalpunkt: 255.
(oder 255.0
, um weniger subtil zu sein).
Wenn Sie nur Integer-Arithmetik verwenden möchten, ist der übliche Vorschlag, alle Ihre Multiplikationen vor allen Divisionen durchzuführen. Dies birgt natürlich das Risiko, dass das Zwischenergebnis überläuft - um das zu helfen, können Sie den Typ long
verwenden. Definieren Sie Ihre Variablen LAB_F
oder x
als long
und führen Sie die letzte Division durch:
%Vor%