Можно заставить исходный код работать корректно, если поменять скобки местами в fillRect:
fillrect(7, 7, (progress * gauge_w) / 100, gauge_h);
Допустим что ширина экрана = 240
Тогда gauge_w = 226
В вашем изначальном коде формула задана как progress * (gauge_w / 100).
При выполнении с progress = 100 выполняются следующие операции:
n = gauge_w = 226
n = n / 100 = 2 (переменная целочисленная - дробная часть отброшена)
n = n * progress = 200
ширина = 200 (должно было быть 226)
Если поменять порядок скобок на упомянутый мной, то действия будут изменены на:
n = progress = 100
n = n * gauge_w = 22 600 (к счастью, максимальное значение целочисленной 2 147 483 64
n = n / 100 = 226 (успех!)
В случае, когда производится большое количество прорисовок экрана, использование целочисленных может оказатся выгоднее чем использование несомненно хорошего, но медлительного класса Real из MP.
Надеюсь эта информация оказалась полезной.
Хорошего дня.