While playing around, i thought i would (jokingly) try to golf
Matt's solution and found something interesting. Using subtraction instead of bit-xor is more accurate. So, cleaning up my current mess of solutions and using subtraction for accuracy, it's now 49 chars (52 to print a carriage return):
#23456789_123456789_123456789_123456789_123456789_123456789_
$_=pop;$l=$_,($_+=$ARGV[0]/$_)/=2while$l-$_;print
jynx
update:an approximation method:
# 44
#23456789_123456789_123456789_123456789_123456789_
$a=pop;($a+=$ARGV[0]/$a)/=2for-9..99;print$a