There were two things that crossed my mind when I read your post. The first was that the value in eax doesn't "look like" valid memory to me - apparently that's okay. The second was that you're overflowing the FPU stack.
The article you cite mentions "rotating registers". Ray Filiatreault's tutorial:
http://www.website.masmforum.com/tutorials/fptute/index.htmldescribes FPU registers as a "revolver cylinder" - as in "six-shooter" (although it's an eight-shooter). This explains why it doesn't just "push the top value off into the bit-bucket", as you might expect.
Instead of freeing the registers individually, you could use "finit" (or "fninit"?) to clear all FPU registers before starting - IF you're done with them. As Intel's article implies, the right way to do it is not leave "junk" on the stack to begin with. Not being too experienced with the FPU, I find it quite "tricky" to keep track of what's where on the stack, and leave it "clean" at the end of my calculation (in an "elegant" way, preferably). I suspect it gets easier with practice. Now that you understand what the problem is, you can probably find a "neater" way to solve it - depends where that "junk" on the stack came from. If it's not "junk", you may need to arrange some temporary storage for intermediate values. (FPU instructions ending in "p" pop the stack - there are a few besides "fstp" that may be useful) I can't decide if this is a "royal PITA" or an "interesting puzzle". Depends on which day I'm doing it, I think. :)
Best,
Frank