mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Abrunden in C


Autor: Ansgar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

muss zwei Zahlen von eineander abziehen und durch eine dritte teilen.

???((Szene1 - Szene2) / Anzahl);

darf aber nur eine ganze Zahl wieder bekommen, weis jemand wie der 
runden Befehl in C heist.

Gruss Ansgar

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn dein Ergebnis eine Ganzzahlvariable ist, wird das automatisch 
erledigt. Beim casten wird immer abgerundet. Oder genauer gesagt: Die 
Nachkommastellen werden einfach abgeschnitten.

Autor: Chrisiiiii (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du die Variable in die das Ergebnis hineingeschrieben wird 8bit 
zuweist dann wird diese immer eine ganze Zahl :)

Quasi:
uint8_t Ergebnis;
Ergebnis = ((Szene1 - Szene2) / Anzahl);

Gruß,

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du in Integer rechnest brauchst Du nichts zu runden...
int MeineFunktion(int Szene1, Szene2, Anzahl);
{
  int Ergebnis;
  Ergebnis = ((Szene1 - Szene2) / Anzahl); 
  return(ergebnis)
}

  

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Chrisiiiii:
Klar, aber wenn der Wert nicht in 8 Bit passt, gibts Probleme. Der OP 
müsste schon erzählen, was er denn da für Zahlen hat.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Ansgar:
Soll tatsächlich nur abgerundet werden, oder soll es eine korrekte 
Rundung sein? Und welche Typen haben Deine Ausgangswerte?

Autor: Ansgar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
brauche eine krekte Rundung
also ab 0,5 muss das 1 ergeben
habe als DatenTyp bislang char da ein genzes Feld gerundet werden soll 
und ich nicht viel Speicher über habe

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> habe als DatenTyp bislang char
Für alle Werte?

Autor: Jörg B. (manos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ansgar wrote:
> also ab 0,5 muss das 1 ergeben
dann wirst Du wohl noch 0,49999 drauf addieren müssen...

Autor: Manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ habe aber auch negative Werte


@ja für alle Werte

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg B. wrote:
> Ansgar wrote:
>> also ab 0,5 muss das 1 ergeben
> dann wirst Du wohl noch 0,49999 drauf addieren müssen...

In int kann man keine 0,49999 addieren, da muß man so runden:

c = (a + b/2) / b;


Peter

Autor: nico26plus1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da bei der Gleichung vom Peter zweimal gerundet wird, besser:

c = (2 * a + b) / (2 * b);

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und ich würde das so machen
(2*(Szene1 - Szene2)+1)  Anzahl  2;

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber auf die Klammerung achten.
((2*(Szene1 - Szene2)+1) / Anzahl) / 2;

Autor: Manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber ich komme mit den Formel doch nicht auf eine gerundete ganze Zahl??

((2*(10-5)+1)/10)/2
=0,55

(10 - 5) / 10
= 0,5 soll mir aber eine 1 liefern

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ergebnis = (Szene1 - Szene2) / (Anzahl / 2);
Ergebnis = Ergebnis / 2 + Ergebnis % 2;

Das sollte das tun, was Du vorhast. Geht so allerdings auch nur mit 
positiven Zahlen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.