hello MathMan, moments after posting this I found the answer so I deleted this thread, why it's still here?
what I wanted was to implement the frexp procedure and as I don't do tricky pointer stuff I was stumped for a while
for example, if x=Pi then frexp[(x, y, e) sets y to .78539816339744828 and the e to 2
here's the procedure
procedure myFrexp(xd:double; var yd:double; var ne:int32);
type dblptr=^double;
var x:double;
m, e,p:int64;
z:dblptr;
begin
x:=abs(xd);
m:=int64((@x)^);
e:=int64(m shr 52); // shift-out the mantissa, leaving the exponent
ne:=e-$3FE; //exponent - offset
p:=((m shl 11) shr 11)+$3FE0000000000000;
z:=@p;
yd:=z^;
if xd<0 then yd:=-yd;
end;
what threw me off was the expression @x^ which the compiler didn't accept so by trial and error I wound up with a convoluted expression that worked but all that was needed was (@x)^