Preprozessor round?

OP #3417686
Lesenswert?
• ▲
▼
Ich habe aus altem atmel code folgendes gefunden:
1
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
2
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
3
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD)

Scheinbar wird hier irgendwie gerundet, gibt es kein round() trunc() 
ceil() oder sowas gleich beim Preprozessor?

Ich möchte 12 / 5 = 2.4 das Ergebnis soll 2 sein.

Das Ergebnis soll immer abgerundet werden.

Gibt es da ne Preprozessor Lösung?
#3417705
Lesenswert?
• ▲
▼
David Mueller schrieb:
> Scheinbar wird hier irgendwie gerundet, gibt es kein round() trunc()
> ceil() oder sowas gleich beim Preprozessor?

Der C-Präprozessor kann nur int Ausdrücke berechnen und testen.
Wenn Du float Zahlen benutzt, funktioniert damit kein #if

Warum man ihn nicht schon längst auf float erweitert hat, weiß ich auch 
nicht. Damit ließe sich viel einfacher ein #error werfen, wenn eine 
berechnete Konstante außerhalb des erlaubten Bereichs ist.
Sonst sieht man es erst, wenn das Programm falsch läuft.
Gast #3420872
Lesenswert?
• ▲
▼
Peter II schrieb:
> David Mueller schrieb:
>> Gibt es da ne Preprozessor Lösung?
>
> bei int Rechenoperationen wird immer die Kommastelle abgeschnitten.

Das ist allerdings bei negativen Zahlen was anderes als immer 
abzurunden.

Peter Dannegger schrieb:
> Warum man ihn nicht schon längst auf float erweitert hat, weiß ich auch
> nicht.

Der Präprozessor kennt keine Datentypen. Man müßte also erstmal ein 
Typsystem im Präprozessor einführen, und das auch noch so, daß 
bestehender Code damit weiter funktioniert.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.