You could improve efficiency by maintaining a value for y^i instead of finding it from scratch each iteration:
1 2 3 4 5 6 7 8 9 10 11 12 13
double ln(double x)
{
double y = (x-1)/(x+1);
double yPow = 1.0;// for accumulating a value for y^i
double output = 1, last_val = 0;
for (int i = 2; abs(last_val - output) > 0.000000001; i +=2)
{
last_val = output;
yPow *= y*y;// two more factors of y here please
output += yPow / ((double)i+1.);// replaced pow(y,i) with yPow
}
return 2*y*output;
}