原です。

>> あと、この関数の逆関数ってどうするんだろう?
>
>精度を気にしなければ1次で補間するのが簡単でしょう。

あ、そか。なるほど。ありがとうございました。

>精度が必要ならスプライン関数で補間するなどの手があります。
>
>def interpol_y(x, y, y0)
>  n = [x.size,y.size].min
>  (n-1).times do |i|
>    if (y0>=y[i] and y0<y[i+1]) or (y0>y[i+1] and y0<=y[i])
>      return x[i] + (y0-y[i])/(y[i+1]-y[i])*(x[i+1]-x[i])
>    end
>  end
>  raise "out of y-domain"
>end
>
>a = 0.0
>c = [a]
>(0.005..10.0).step(0.01) do |x|
>  a += Math.exp(-x**2/2)
>  c << a
>end
>a *= 2
>y = c.collect{|x| 0.5+x/a}
>x = (0...y.size).collect{|i| i*0.01}
>
>p interpol_y(x, y, 0.9)
>
>
>田中昌宏

あらかじめ表を作らずに逆関数求めるってのは、、、できなさそうだなあ。