Forum: Mikrocontroller und Digitale Elektronik Abrunden in C


von Ansgar (Gast)


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

von Philipp B. (philipp_burch)


Lesenswert?

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

von Chrisiiiii (Gast)


Lesenswert?

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

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

Gruß,

von Peter (Gast)


Lesenswert?

Wenn Du in Integer rechnest brauchst Du nichts zu runden...
1
int MeineFunktion(int Szene1, Szene2, Anzahl);
2
{
3
  int Ergebnis;
4
  Ergebnis = ((Szene1 - Szene2) / Anzahl); 
5
  return(ergebnis)
6
}

  

von johnny.m (Gast)


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.

von johnny.m (Gast)


Lesenswert?

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

von Ansgar (Gast)


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

von johnny.m (Gast)


Lesenswert?

> habe als DatenTyp bislang char
Für alle Werte?

von Jörg B. (manos)


Lesenswert?

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

von Manfred (Gast)


Lesenswert?

@ habe aber auch negative Werte


@ja für alle Werte

von Peter D. (peda)


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

von nico26plus1 (Gast)


Lesenswert?

da bei der Gleichung vom Peter zweimal gerundet wird, besser:

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

von Walter (Gast)


Lesenswert?

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

von johnny.m (Gast)


Lesenswert?

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

von Manfred (Gast)


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

von johnny.m (Gast)


Lesenswert?

1
Ergebnis = (Szene1 - Szene2) / (Anzahl / 2);
2
Ergebnis = Ergebnis / 2 + Ergebnis % 2;

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

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.