/// <summary>
        /// Originally described at https://github.com/stevengj/nlopt/blob/master/src/api/optimize.c#L804
        /// </summary>
        private static void pre_max(int n, double[] x, int x_offset, double[] v, int v_offset, double[] vpre, int vpre_offset,
                                    object[] data, int data_offset)
        {
            f_max_data d = (f_max_data)data[data_offset];

            d.pre(n, x, x_offset, v, v_offset, vpre, vpre_offset, d.f_data, data_offset);
            for (int i = 0; i < n; ++i)
            {
                vpre[i] = -vpre[i];
            }
        }