Bauform B. schrieb:
> round() liefert blöderweise wieder ein double.
> lround() liefert auch kein int, aber immerhin long
hier beim Cortex-M4 muss es natürlich lroundf() heißen
1 | long int lround(double x);
|
2 | long int lroundf(float x);
|
3 | long int lroundl(long double x);
|
Eigentlich wollte ich nur die eure Versuche ins Lächerliche ziehen,
round() neu zu erfinden. Das geht nun natürlich nicht mehr :( Aber im
Ernst: wenn man schon sowas selbst baut, obwohl es seit C99 gratis dabei
ist, sollte man doch mal schauen, ob der M4 nicht einen Maschinenbefehl
dafür hat. Dann hätte man eine "static inline int runden (float)", die
aus einem einzigen Maschinenbefehl besteht.
VCVTR sieht gut aus, ich bin nur nicht sicher, ob "round to nearest"
wirklich der Default ist. Der aktuelle Mode steht im FPSCR[23:22] und
0b00 wäre der richtige Wert. Aber es gibt noch das "Floating-point
Default Status Control Register" FPDSCR und die Initialisierungen durch
Compiler/Runtime/Framework/IDE/Whatever... :(