OK - I think I see what you're trying to do but it's all getting a little bit messy. If I understand your requirement you want to rough down in rough steps until you're at some level or at a point where another rough step would be a step too far. From there you want to finish down in finer steps until you're done, but again mnaking sure you don't go beyond the finish level.
Here's the pseudo code - untested of course so the usual applies - if it breaks your machine or your heart you get to keep the pieces.

currentX is where you're at at any time
roughStepX is your roughing stepover
fineLevelX is where you want to fine cut from
fineStepX is your fine stepover
finishLevelX is where you want the whole shabang to stop
while ((currentX - roughStepX) > fineLevelX)
currentX = currentX - roughStepX
G1 currentX
wend
while ((currentX - fineStepX) > finishLevelX)
currentX = currentX - fineStepX
G1 currentX
wend
if (currentX > finishLevelX) then
G1 finishLevelX
end if
Note that all tests are exclusively > so a) the = and < are handled implicitly i.e. by drop throu - so no possibility of an infinite loop (well unless you set the stepovers to zero! in which case you deserve all you get

) and b) we don't give a monkey's about decimal places and such. Also all numbers can be set at the top and therefore do not appear as "magic" numbers in the code proper.