program sixbytes { www.merlyn.demon.co.uk >= 2001-11-25 } ; type A6 = array [1..6] of byte ; const Q : extended = 1.0/256.0 ; function TwoTo(const P : integer) : extended ; var S : extended ; J : integer ; begin S := 1 ; for J := 1 to Abs(P) do S := 2.0*S ; { but see ... } if P<0 then S := 1.0/S ; TwoTo := S end {TwoTo} ; function SixToExt(const Six : real{48}) : extended ; var S : extended ; A : A6 absolute Six ; begin if A[1]=0 then begin SixToExt := 0 ; EXIT end ; S := 1.0 + 2.0 * ((((A[2]*Q+A[3])*Q+A[4])*Q+A[5])*Q+(A[6] and $7F))*Q ; if A[6]>127 then S := -S ; SixToExt := S * TwoTo(integer(A[1])-129) end {SixToExt} ; Var J : integer ; Z : real{48} ; BEGIN ; Randomize ; for J := 1 to 10 do begin Z := Random*876 ; Writeln(Z:20:12, SixToExt(Z):20:12, SixToExt(-Z):20:12) ; end ; Z := 0 ; Writeln(Z:20:12, SixToExt(Z):20:12) ; Readln ; END. Slightly tested.