Here is my golfed solution, using Newton's method.
No sanity checks for the input or anything, but usually gives a result
which is accurate to >10 digits.
def irr(i)
x=1;9.times{x=x-(n=d=t=0;i.map{|e|n+=_=e*x**t-=1;d+=t*_/x};n/d)};x-1
end
And James: So long, and thanks for all the quiz'.