static double grad (int hash, double x, double y, double z)
    {
        int h = hash & 15;          // CONVERT LO 4 BITS OF HASH CODE
        double u = h < 8 ? x : y,   // INTO 12 GRADIENT DIRECTIONS.
               v = h < 4 ? y : h == 12 || h == 14 ? x : z;
        return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v);
    }