Hmmm... I dunno. Looks to me that in "double_factorial", you're using a local variable at ebp - 4 without reserving any space for it. You might want "enter 4, 0" (or maybe "enter 16, 0" for better stack alignment?). I don't think that's causing a problem. Also, comparing floats for equality is "iffy". Since you're interested in 1.0, that probably isn't a problem, either(?).
I'm not sure what you're doing with "mytest". You seem to be swapping "number" and "result". Is that intentional? (or maybe that's your problem?) I think we'd need to see the caller of "mytest" to know.
In order to put a double on the stack, either as a parameter or a local variable, you could do it with two pushes:
push dword [my_double + 4]
push dword [my_double]
or probably better(?):
fld qword [my_double]
sub esp, 8
fstp qword [esp]
If I get around to playing with your code, I might have a better answer, but that's all I can think of right now. The only "factorial" program I've done has used integers - it'll only do up to 20! before overflowing 64 bits.
Best,
Frank