FORTRAN p-norm

What would be an accurate and efficient computation of the p-norm in Fortran?

Integer :: p
Real :: sum, pn
Do i = 1, Size (a)          
  sum = sum + ((Abs a(i)) ** p)       
End Do
pn = sum ** (1.0/ Real(p))