Forum: Compiler & IDEs C: Problem durch Rundungsfehler bei Skalierung


von Info (Gast)


Lesenswert?

Der Timerwert "hell" (0...1250) eines Phasenanschnittdimmers soll auf 
eine prozentuale Helligkeit gemappt werden (100..0%), die Wandlung 
erfolgt bislang so:
1
int hell =  ((100-proz)* 125)/10 );
2
int proz = 100 - ((hell* 10) / 125);

Um 1% heller zu werden, wird proz ermittelt, erhöht, und 
zurückgewandelt. Das geht auch. Aber "proz--" verändert "hell" auf 
diesem Weg nicht.

Was mache ich falsch?

(TI Compiler für MSP430)

von Info (Gast)


Lesenswert?

Ok, ich spar mir den Umweg, stattdessen "hell +/-=  1250/100;"

von Rolf Magnus (Gast)


Lesenswert?

Info schrieb:
> Ok, ich spar mir den Umweg, stattdessen "hell +/-=  1250/100;"

1250/100 sind 12. Du wirst auf dem Weg nicht ganu 100 Schritte haben, 
sondern 104, und du wirst, wenn du bei 0 anfängst, nicht genau 100% 
erreichen, sondern nur maximal 99,8%.

von my2Cent (Gast)


Lesenswert?

Info schrieb:
> Ok, ich spar mir den Umweg, stattdessen "hell +/-=  1250/100;"

Warum nimmst du nicht eine höher aufgelöste Zwischenvariable, die z.B. 
den Bereich [0..1250*16] überstreicht? Ein Inkrement um 1% wäre exakt 
200.

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.