<p>On an 8-bit micro controller I would like to do the following:</p>

<pre><code>16bit_integer = another_16bit_integer * 0.997;</code></pre>

<p>with the least possible number of instructions.</p>

How about integer arithmetic in 32 bits?
```
```
16bit_integer = (int16_t) (another_16bit_integer * (int32_t) 997 / 1000);
```
```
32 bits will be enough to store (INT16_MAX × 997), do the sum on values 1000 times larger then divide back to your 16 bit scale.