Я считаю, что проблема заключается в том, что в случае done
компилятор фактически не генерирует код для выполнения вычислений. Вместо этого вычисление выполняется во время компиляции, и на его место ставится одна константа.
Компилятор, в отличие от EVM во время выполнения, поддерживает десятичную математику. Например. вы можете написать 0.5 ether
несмотря на то, что EVM не имеет представления для числа 0,5.