Hallo zusammen,
Mal eine Frage an euch C cracks über integer overflows. Man nehme
folgendes Beispiel an:
1 | static uint16_t top_value = 6249;
|
2 |
|
3 | void pwm_set(uint8_t value) {
|
4 | value = (value > 100) ? (100) : (value);
|
5 |
|
6 | // 1. Möglichkeit
|
7 | uint16_t cmp = (top_value * value) / 100;
|
8 |
|
9 | // 2. Möglichkeit
|
10 | uint16_t cmp = top_value / 100 * value;
|
11 | }
|
Aus meiner Sicht wäre in der ersten Möglichkeit ein Overflow, falls der
value z.B. 100 ist. Handelt dass der Compiler, oder muss ich da selber
auf die zweite Möglichkeit ausweichen? Die Erste würde mir besser
gefallen, da dann kein (oder ein viel kleinerer) Rundungsfehler
entsteht.