g | x | w | all
Bytes Lang Time Link
043APLNARS251002T073221ZRosario
058Ruby160506T085401ZSherlock

APL(NARS), 43 chars

{k←(4x*w)÷⍨×/(w+1)..2x×w←∣⍵⋄⍵≥0:k⋄(¯1*w)÷k}

Follow the question formula. Input one integer output one big rational.

test:

  f←{k←(4x*w)÷⍨×/(w+1)..2x×w←∣⍵⋄⍵≥0:k⋄(¯1*w)÷k}
  f¨0 1 ¯1 ¯2 ¯3
0 1r2 ¯2 4r3 ¯8r15 
  f 90
1092285139227484611750828308769952957225662977091616325209362521712032
  8502132484782057886439774642254091092958172712050073686282606773
  5796888331731402873992919921875r1237940039285380274899124224 
  f ¯90
1237940039285380274899124224r10922851392274846117508283087699529572256
  6297709161632520936252171203285021324847820578864397746422540910
  929581727120500736862826067735796888331731402873992919921875 
  f ¯91
¯2475880078570760549798248448r1977036102001747147268999238873614852578
  4499885358255486289461642987794588859797455524774455992102479904
  878254292608810633372171518260179236788043383920192718505859375 

Ruby, 80 59 58 bytes

f=->n{n<0?(-1)**n/f[-n]:(1..n).reduce(1){|z,a|z*(a-1r/2)}}

Any golfing suggestions are welcome.

Ungolfing:

def half_gamma(n)
  if n < 0
    return (-1) ** n / f(-n)
  else
    # Is there an golfier way to write product([1/2,3/2..(2*n-1)/2])?
    return (1..n).reduce(1) {|z, a| z * (a - 1r/2)}
  end
end