Maybe you can just generate the mantissa bits of the float as ints with the usual rotate-subtract which is used in so many 4k intros and such to produce a float between 0 and 1. Then you can get the number in range by multiplying it up afterwards or use the fscale if you only need it in a po2 range.
random
move.l random_seed,d0
ror.l d0,d0
subq.l #1,d0 ; demoscene random
move.l d0,d1
and.l #(1<<24)-1,d1 ; random mantissa bits in the 23 low bits
or.l #exponent_bits_and_sign_bit,d1
fmove.s d1,fp0 ; load fp0 with d1's bits. not sure this is the syntax. no format conversion should happen
fmul.s #range,fp0
move.l d0,random_seed
rts
random_seed dc.l 1243462
I'm sorry this is probably really bad code, but maybe a discussion starter for better suggestions. Also it is not tested or assembled or anything.