To elaborate just a little: the extra runtime is spent ensuring proper behavior for Inf and for cases where intermediate quantities (such as your y2=y.re^2+y.im^2) would over/underflow. You can take a look at the current implementation in the source code.