I think this is a sampling issue. You can look at the PlotPoints options (for example, try PlotPoints->100). Also, you don't really need all of the N[...,$MachinePrecision] functions. Every time you have a number with a decimal point (e.g. the various 0.5 and 1.0 and so forth), that whole expression will already be at machine precision.