Цитата(the_last_dreamer @ Sep 20 2010, 23:21)

Такой код работает правильно:
Правильно работают оба кода.
В чём смысл представленной программы при
наружном наблюдении за её поведением? Крутиться в бесконечном цикле.
При этом внутренние детали поведения, никак не проявляющиеся снаружи, компилятор имеет право выоптимизировать начисто. Во втором случае он всего лишь поленился это сделать.
Объявите tmpVar как volatile, сказав тем компилятору, что он не имеет права предполагать что-то по поводу видимости этой переменной из внешнего по отношению к программе мира, и наслаждайтесь.
Или присвойте значение этой переменной какому-то порту микроконтроллера - нужно дать понять компилятору, что результат floor() кому-то нужен. Хотя и в этом случае он имеет право пробросить результат floor() прямо в порт, исключив из программы переменную tmpVar как не имеющую значения со стороны внешнего наблюдателя.