Forum: Mikrocontroller und Digitale Elektronik Integer als Ergebnis mit Float berechnen


von Gast (Gast)


Lesenswert?

unsigned long int ist_frequenz;
float ist_frequ_tmp;

ist_frequenz=freq_overfl_cnt_tmp*(unsigned long int)0xFFFF;
ist_frequenz+= (unsigned long int)TCNT1_tmp-20;


ist_frequ_tmp=(float)ist_frequenz / (float)8000000;

ist_frequ_tmp = 1/ist_frequ_tmp;
>>ist_frequenz=ist_frequ_tmp*32;<<
--------

Hallo,
ich habe oben geposteten Code. Sobald die mit ">>...<<" markierte Zeile 
eingefügt wird, wird der Code plötzlich 4-fach so groß wie zuvor -> also 
hoher Rechenaufwand für die Berechnung.
Es bringt auch nichts mit casten etc. deshalb denke ich dass irgendwo 
ein grundsätzlicher Fehler vorliegt, aber WO?
Für nen Tipp wäre ich dankbar!

von Sven P. (Gast)


Lesenswert?

Gast wrote:
> Es bringt auch nichts mit casten etc. deshalb denke ich dass irgendwo
> ein grundsätzlicher Fehler vorliegt, aber WO?
> Für nen Tipp wäre ich dankbar!

Dein absolut grundsätzlicher Fehler: Floats. Floats sind so ein 
Spielzeug, das viele Spielkinder anzieht und dass viele auf Biegen und 
Brechen benutzen wollen. Eigentlich braucht kein Schwein 
Fließkommazahlen, selbst moderne Sternwarten kommen komplett ohne aus.

von Gast (Gast)


Lesenswert?

Ja, das ist mir klar. Grundsätzlich versuche ich floats auch zu umgehen, 
aber hier häng ich grad irgendwie und mir fällt keine nicht-float-Lösung 
ein....

von Gast (Gast)


Lesenswert?

Problem gelöst! :-)

von Sven P. (Gast)


Lesenswert?

Wie denn? Und: Warum gehts nicht ohne Float? Alles mal 1000 nehmen und 
nacher das Komma wieder setzen...?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.