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.