Spotted a small improvement: a 16-bit multiplication is sufficient.

LED on time minimum: 1879 clock cycles,
LED on time maximum: 16388 clock cycles,
LED on time average: 11470,6 clock cycles,
Move floating point entirely into teacup_log().

This required additional steps to use the full range of an uint32
and keep accuracy. Doing it this way, accuary is still excellent.
As another steps to become fully integer, do normalisation as such.
Go entirely integer.

Performance is back:

LED on time minimum: 1644 clock cycles,
LED on time maximum: 6506 clock cycles,
LED on time average: 5084,92 clock cycles,
int_log(): loop up the multiplication part.

Makes it even a bit faster:

  SIZES             ATmega,,,  '168    '328(P)    '644(P)    '1280
  FLASH : 20222 bytes          142%       66%        32%       16%
  RAM   :  2169 bytes          212%      106%        53%       27%
  EEPROM:    16 bytes            2%        1%         1%        1%

  LED on time minimum: 1646 clock cycles,
  LED on time maximum: 6345 clock cycles,
  LED on time average: 4920,21 clock cycles,
What a small change can make a difference!

This change saves a whopping 2200 clock cycles on average.

  FLASH : 20172 bytes          141%       66%        32%       16%
  RAM   :  2169 bytes          212%      106%        53%       27%
  EEPROM:    16 bytes            2%        1%         1%        1%

  LED on time minimum: 1646 clock cycles,
  LED on time maximum: 3165 clock cycles,
  LED on time average: 2734,88 clock cycles,
More optimisation.

This ATmega is apparently good at multiplication.

  FLASH : 20232 bytes          142%       66%        32%       16%
  RAM   :  2169 bytes          212%      106%        53%       27%
  EEPROM:    16 bytes            2%        1%         1%        1%

  LED on time minimum: 1646 clock cycles,
  LED on time maximum: 2714 clock cycles,
  LED on time average: 2486,61 clock cycles,