%%HP: T(3)A(R)F(.);
\<< "
" 1 DISP DUP2
  IF "1" FCMP 1
SAME SWAP STR\-> FP
AND
  THEN \-> f c
    \<< "0" "1" f
      WHILE OVER c
FCMP -1 SAME OVER
"0" FCMP AND
      REPEAT FINV
DUP FFP 4 ROLLD FIP
OVER FMUL ROT FADD
DUP 1 DISP ROT
      END DROP DUP2
c
      IF DUP2 FCMP
1 SAME
      THEN FSUB
OVER FDIV DUP FIP
SWAP FFP "0" FCMP 1
SAME \->STR FADD FMUL
FSUB
      ELSE 3 DROPN
      END DUP2 1 2
      START DUP f
FMUL ".5" FADD FIP
SWAP FDIV f FSUB
DUP "0" FCMP SIGN
\->STR FMUL SWAP
      NEXT
      IF FCMP 1
SAME
      THEN SWAP
      END DROP DUP
f FMUL ".5" FADD
FIP SWAP
    \>>
  ELSE DROP
  END
\>>
