| Bytes | Lang | Time | Link |
|---|---|---|---|
| 043 | APLNARS | 251002T073221Z | Rosario |
| 058 | Ruby | 160506T085401Z | Sherlock |
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