//+++++++++++++++++++++++++++++++++++++++++++++++++++++
// File automatically generated by Xfuzzy - DO NOT EDIT
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
package pkg.xfl.family;
import xfuzzy.lang.*;
public class spline extends Family {
public spline() {
super("xfl","spline");
Parameter single[] = new Parameter[0];
setSingleParameters(single);
setParamListName("p");
setParamList(new Parameter[0]);
}
public int members() {
double[] p = getParamListValues();
return p.length+3;
}
public double compute(int i, double x) {
double min = this.min();
double max = this.max();
double[] p = getParamListValues();
double g1 = (p.length>0? p[0] : max) - min;
double g2 = max - (p.length>0? p[p.length-1] : min);
double a = (i<=2? min+(i-2)*g1 : p[i-3]);
double b = (i<=1? min+(i-1)*g1 : (i==p.length+2? max : p[i-2]));
double c = (i==0? min : (i>=p.length+1? max+(i-p.length-1)*g2 : p[i-1]));
double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);
if(x<a || x>d) return 0;
if(x<=b) return (x-a)*(x-a)/((b-a)*(c-a));
if(x>=c) return (x-d)*(x-d)/((d-c)*(d-b));
return 1 - (x-b)*(x-b)/((c-b)*(d-b)) - (x-c)*(x-c)/((c-b)*(c-a));
}
public double greatereq(int i, double x) {
double min = this.min();
double max = this.max();
double[] p = getParamListValues();
double g1 = (p.length>0? p[0] : max) - min;
double g2 = max - (p.length>0? p[p.length-1] : min);
double a = (i<=2? min+(i-2)*g1 : p[i-3]);
double b = (i<=1? min+(i-1)*g1 : (i==p.length+2? max : p[i-2]));
double c = (i==0? min : (i>=p.length+1? max+(i-p.length-1)*g2 : p[i-1]));
double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);
double xmax = (c*d - b*a)/(c+d-b-a);
if(x<a) return 0;
if(x<=b) return (x-a)*(x-a)/((b-a)*(c-a));
if(x<=xmax) return 1- (x-b)*(x-b)/((c-b)*(d-b)) - (x-c)*(x-c)/((c-b)*(c-a));
return (d-a)/(c+d-a-b);
}
public double smallereq(int i, double x) {
double min = this.min();
double max = this.max();
double[] p = getParamListValues();
double g1 = (p.length>0? p[0] : max) - min;
double g2 = max - (p.length>0? p[p.length-1] : min);
double a = (i<=2? min+(i-2)*g1 : p[i-3]);
double b = (i<=1? min+(i-1)*g1 : (i==p.length+2? max : p[i-2]));
double c = (i==0? min : (i>=p.length+1? max+(i-p.length-1)*g2 : p[i-1]));
double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);
double xmax = (c*d - b*a)/(c+d-b-a);
if(x<xmax) return (d-a)/(c+d-a-b);
if(x<=c) return 1- (x-b)*(x-b)/((c-b)*(d-b)) - (x-c)*(x-c)/((c-b)*(c-a));
if(x<=d) return (x-d)*(x-d)/((d-c)*(d-b));
return 0;
}
public double center(int i) {
double min = this.min();
double max = this.max();
double[] p = getParamListValues();
double g1 = (p.length>0? p[0] : max) - min;
double g2 = max - (p.length>0? p[p.length-1] : min);
double a = (i<=2? min+(i-2)*g1 : p[i-3]);
double b = (i<=1? min+(i-1)*g1 : (i==p.length+2? max : p[i-2]));
double c = (i==0? min : (i>=p.length+1? max+(i-p.length-1)*g2 : p[i-1]));
double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);
return (c*d - b*a)/(c+d-b-a);
}
public double basis(int i) {
double min = this.min();
double max = this.max();
double[] p = getParamListValues();
double g1 = (p.length>0? p[0] : max) - min;
double g2 = max - (p.length>0? p[p.length-1] : min);
double a = (i<=2? min+(i-2)*g1 : p[i-3]);
double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);
return (d-a);
}
public double[] deriv_eq(int i, double x) {
double[] deriv = new double[getNumberOfParameters()];
double min = this.min();
double max = this.max();
double[] p = getParamListValues();
double g1 = (p.length>0? p[0] : max) - min;
double g2 = max - (p.length>0? p[p.length-1] : min);
double a = (i<=2? min+(i-2)*g1 : p[i-3]);
double b = (i<=1? min+(i-1)*g1 : (i==p.length+2? max : p[i-2]));
double c = (i==0? min : (i>=p.length+1? max+(i-p.length-1)*g2 : p[i-1]));
double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);
double da = 0;
double db = 0;
double dc = 0;
double dd = 0;
if(a<x && x<=b) {
double F = (x-a)*(x-a)/((b-a)*(c-a));
da = F/(b-a) + F/(c-a) - 2*F/(x-a);
db = -F/(b-a);
dc = -F/(c-a);
dd = 0;
} else if(b<x && x<c) {
double F1 = (x-b)*(x-b)/((c-b)*(d-b));
double F2 = (x-c)*(x-c)/((c-b)*(c-a));
da = -F2/(c-a);
db = 2*F1/(x-b) - F1/(c-b) - F1/(d-b) - F2/(c-b);
dc = 2*F2/(x-c) + F2/(c-b) + F2/(c-a) + F1/(c-b);
dd = F1/(d-b);
} else if(c<=x && x<d) {
double F = (x-d)*(x-d)/((d-c)*(d-b));
da = 0;
db = F/(d-b);
dc = F/(d-c);
dd = -F/(d-b) - F/(d-c) - 2*F/(x-d);
}
if(i>=3) deriv[i-3] = da;
if(i>=2 && i<p.length+2) deriv[i-2] = db;
if(i>=1 && i<p.length+1) deriv[i-1] = dc;
if(i>=0 && i<p.length) deriv[i] = db;
return deriv;
}
public double[] deriv_greq(int i, double x) {
double[] deriv = new double[getNumberOfParameters()];
double min = this.min();
double max = this.max();
double[] p = getParamListValues();
double g1 = (p.length>0? p[0] : max) - min;
double g2 = max - (p.length>0? p[p.length-1] : min);
double a = (i<=2? min+(i-2)*g1 : p[i-3]);
double b = (i<=1? min+(i-1)*g1 : (i==p.length+2? max : p[i-2]));
double c = (i==0? min : (i>=p.length+1? max+(i-p.length-1)*g2 : p[i-1]));
double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);
double xmax = (c*d - b*a)/(c+d-b-a);
double da = 0;
double db = 0;
double dc = 0;
double dd = 0;
if(a<x && x<=b) {
double F = (x-a)*(x-a)/((b-a)*(c-a));
da = F/(b-a) + F/(c-a) - 2*F/(x-a);
db = -F/(b-a);
dc = -F/(c-a);
dd = 0;
} else if(b<x && x<xmax) {
double F1 = (x-b)*(x-b)/((c-b)*(d-b));
double F2 = (x-c)*(x-c)/((c-b)*(c-a));
da = -F2/(c-a);
db = 2*F1/(x-b) - F1/(c-b) - F1/(d-b) - F2/(c-b);
dc = 2*F2/(x-c) + F2/(c-b) + F2/(c-a) + F1/(c-b);
dd = F1/(d-b);
} else if(xmax<=x) {
double D = (c+d-b-a)*(c+d-b-a);
da = (b-c)/D;
db = (d-a)/D;
dc = (a-d)/D;
dd = (c-b)/D;
}
if(i>=3) deriv[i-3] = da;
if(i>=2 && i<p.length+2) deriv[i-2] = db;
if(i>=1 && i<p.length+1) deriv[i-1] = dc;
if(i>=0 && i<p.length) deriv[i] = db;
return deriv;
}
public double[] deriv_smeq(int i, double x) {
double[] deriv = new double[getNumberOfParameters()];
double min = this.min();
double max = this.max();
double[] p = getParamListValues();
double g1 = (p.length>0? p[0] : max) - min;
double g2 = max - (p.length>0? p[p.length-1] : min);
double a = (i<=2? min+(i-2)*g1 : p[i-3]);
double b = (i<=1? min+(i-1)*g1 : (i==p.length+2? max : p[i-2]));
double c = (i==0? min : (i>=p.length+1? max+(i-p.length-1)*g2 : p[i-1]));
double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);
double xmax = (c*d - b*a)/(c+d-b-a);
double da = 0;
double db = 0;
double dc = 0;
double dd = 0;
if(c<=x && x<d) {
double F = (x-d)*(x-d)/((d-c)*(d-b));
da = 0;
db = F/(d-b);
dc = F/(d-c);
dd = -F/(d-b) - F/(d-c) - 2*F/(x-d);
} else if(xmax<x && x<c) {
double F1 = (x-b)*(x-b)/((c-b)*(d-b));
double F2 = (x-c)*(x-c)/((c-b)*(c-a));
da = -F2/(c-a);
db = 2*F1/(x-b) - F1/(c-b) - F1/(d-b) - F2/(c-b);
dc = 2*F2/(x-c) + F2/(c-b) + F2/(c-a) + F1/(c-b);
dd = F1/(d-b);
} else if(x<=xmax) {
double D = (c+d-b-a)*(c+d-b-a);
da = (b-c)/D;
db = (d-a)/D;
dc = (a-d)/D;
dd = (c-b)/D;
}
if(i>=3) deriv[i-3] = da;
if(i>=2 && i<p.length+2) deriv[i-2] = db;
if(i>=1 && i<p.length+1) deriv[i-1] = dc;
if(i>=0 && i<p.length) deriv[i] = db;
return deriv;
}
public double[] deriv_center(int i) {
double[] deriv = new double[getNumberOfParameters()];
double[] p = getParamListValues();
if(i>=3) deriv[i-3] = 1;
if(i>=2 && i<p.length+2) deriv[i-2] = 1;
if(i>=1 && i<p.length+1) deriv[i-1] = 1;
if(i>=0 && i<p.length) deriv[i] = 1;
return deriv;
}
public double[] deriv_basis(int i) {
double[] deriv = new double[getNumberOfParameters()];
double[] p = getParamListValues();
if(i>=3) deriv[i-3] = -1;
if(i>=0 && i<p.length) deriv[i] = 1;
return deriv;
}
public boolean test () {
double min = this.min();
double max = this.max();
double[] p = getParamListValues();
return ( p.length>0 && p[0]>min && p[p.length-1]<max && sorted(p) );
}
public void update() {
if(!isAdjustable()) return;
double[] pos = get();
double[] desp = getDesp();
boolean[] adj = getAdjustable();
double min = this.min();
double max = this.max();
double step = this.step();
double[] p = getParamListValues();
pos = sortedUpdate(pos,desp,adj);
if(pos[0]<=min) {
pos[0]=min+step;
for(int i=1;i<p.length; i++) {
if(pos[i]<=pos[i-1]) pos[i] = pos[i-1]+step;
else break;
}
}
if(pos[p.length-1]>=max) {
pos[p.length-1]=max-step;
for(int i=p.length-2; i>=0; i--) {
if(pos[i]>=pos[i+1]) pos[i] = pos[i+1]-step;
else break;
}
}
updateValues(pos);
}
public String getEqualJavaCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (p.length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (p.length>0? p[p.length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double b = (i<=1? min+(i-1)*g1 : (i==p.length+2? max : p[i-2]));"+eol;
code += " double c = (i==0? min : (i>=p.length+1? max+(i-p.length-1)*g2 : p[i-1]));"+eol;
code += " double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);"+eol;
code += " if(x<a || x>d) return 0;"+eol;
code += " if(x<=b) return (x-a)*(x-a)/((b-a)*(c-a));"+eol;
code += " if(x>=c) return (x-d)*(x-d)/((d-c)*(d-b));"+eol;
code += " return 1 - (x-b)*(x-b)/((c-b)*(d-b)) - (x-c)*(x-c)/((c-b)*(c-a));"+eol;
return code;
}
public String getGreqJavaCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (p.length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (p.length>0? p[p.length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double b = (i<=1? min+(i-1)*g1 : (i==p.length+2? max : p[i-2]));"+eol;
code += " double c = (i==0? min : (i>=p.length+1? max+(i-p.length-1)*g2 : p[i-1]));"+eol;
code += " double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);"+eol;
code += " double xmax = (c*d - b*a)/(c+d-b-a);"+eol;
code += " if(x<a) return 0;"+eol;
code += " if(x<=b) return (x-a)*(x-a)/((b-a)*(c-a));"+eol;
code += " if(x<=xmax) return 1- (x-b)*(x-b)/((c-b)*(d-b)) - (x-c)*(x-c)/((c-b)*(c-a));"+eol;
code += " return (d-a)/(c+d-a-b);"+eol;
return code;
}
public String getSmeqJavaCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (p.length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (p.length>0? p[p.length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double b = (i<=1? min+(i-1)*g1 : (i==p.length+2? max : p[i-2]));"+eol;
code += " double c = (i==0? min : (i>=p.length+1? max+(i-p.length-1)*g2 : p[i-1]));"+eol;
code += " double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);"+eol;
code += " double xmax = (c*d - b*a)/(c+d-b-a);"+eol;
code += " if(x<xmax) return (d-a)/(c+d-a-b);"+eol;
code += " if(x<=c) return 1- (x-b)*(x-b)/((c-b)*(d-b)) - (x-c)*(x-c)/((c-b)*(c-a));"+eol;
code += " if(x<=d) return (x-d)*(x-d)/((d-c)*(d-b));"+eol;
code += " return 0;"+eol;
return code;
}
public String getCenterJavaCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (p.length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (p.length>0? p[p.length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double b = (i<=1? min+(i-1)*g1 : (i==p.length+2? max : p[i-2]));"+eol;
code += " double c = (i==0? min : (i>=p.length+1? max+(i-p.length-1)*g2 : p[i-1]));"+eol;
code += " double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);"+eol;
code += " return (c*d - b*a)/(c+d-b-a);"+eol;
return code;
}
public String getBasisJavaCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (p.length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (p.length>0? p[p.length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double d = (i>=p.length? max+(i-p.length)*g2 : p[i]);"+eol;
code += " return (d-a);"+eol;
return code;
}
public String getEqualCCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (length>0? p[length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double b = (i<=1? min+(i-1)*g1 : (i==length+2? max : p[i-2]));"+eol;
code += " double c = (i==0? min : (i>=length+1? max+(i-length-1)*g2 : p[i-1]));"+eol;
code += " double d = (i>=length? max+(i-length)*g2 : p[i]);"+eol;
code += " if(x<a || x>d) return 0;"+eol;
code += " if(x<=b) return (x-a)*(x-a)/((b-a)*(c-a));"+eol;
code += " if(x>=c) return (x-d)*(x-d)/((d-c)*(d-b));"+eol;
code += " return 1 - (x-b)*(x-b)/((c-b)*(d-b)) - (x-c)*(x-c)/((c-b)*(c-a));"+eol;
return code;
}
public String getGreqCCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (length>0? p[length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double b = (i<=1? min+(i-1)*g1 : (i==length+2? max : p[i-2]));"+eol;
code += " double c = (i==0? min : (i>=length+1? max+(i-length-1)*g2 : p[i-1]));"+eol;
code += " double d = (i>=length? max+(i-length)*g2 : p[i]);"+eol;
code += " double xmax = (c*d - b*a)/(c+d-b-a);"+eol;
code += " if(x<a) return 0;"+eol;
code += " if(x<=b) return (x-a)*(x-a)/((b-a)*(c-a));"+eol;
code += " if(x<=xmax) return 1- (x-b)*(x-b)/((c-b)*(d-b)) - (x-c)*(x-c)/((c-b)*(c-a));"+eol;
code += " return (d-a)/(c+d-a-b);"+eol;
return code;
}
public String getSmeqCCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (length>0? p[length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double b = (i<=1? min+(i-1)*g1 : (i==length+2? max : p[i-2]));"+eol;
code += " double c = (i==0? min : (i>=length+1? max+(i-length-1)*g2 : p[i-1]));"+eol;
code += " double d = (i>=length? max+(i-length)*g2 : p[i]);"+eol;
code += " double xmax = (c*d - b*a)/(c+d-b-a);"+eol;
code += " if(x<xmax) return (d-a)/(c+d-a-b);"+eol;
code += " if(x<=c) return 1- (x-b)*(x-b)/((c-b)*(d-b)) - (x-c)*(x-c)/((c-b)*(c-a));"+eol;
code += " if(x<=d) return (x-d)*(x-d)/((d-c)*(d-b));"+eol;
code += " return 0;"+eol;
return code;
}
public String getCenterCCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (length>0? p[length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double b = (i<=1? min+(i-1)*g1 : (i==length+2? max : p[i-2]));"+eol;
code += " double c = (i==0? min : (i>=length+1? max+(i-length-1)*g2 : p[i-1]));"+eol;
code += " double d = (i>=length? max+(i-length)*g2 : p[i]);"+eol;
code += " return (c*d - b*a)/(c+d-b-a);"+eol;
return code;
}
public String getBasisCCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (length>0? p[length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double d = (i>=length? max+(i-length)*g2 : p[i]);"+eol;
code += " return (d-a);"+eol;
return code;
}
public String getEqualCppCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (length>0? p[length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double b = (i<=1? min+(i-1)*g1 : (i==length+2? max : p[i-2]));"+eol;
code += " double c = (i==0? min : (i>=length+1? max+(i-length-1)*g2 : p[i-1]));"+eol;
code += " double d = (i>=length? max+(i-length)*g2 : p[i]);"+eol;
code += " if(x<a || x>d) return 0;"+eol;
code += " if(x<=b) return (x-a)*(x-a)/((b-a)*(c-a));"+eol;
code += " if(x>=c) return (x-d)*(x-d)/((d-c)*(d-b));"+eol;
code += " return 1 - (x-b)*(x-b)/((c-b)*(d-b)) - (x-c)*(x-c)/((c-b)*(c-a));"+eol;
return code;
}
public String getGreqCppCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (length>0? p[length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double b = (i<=1? min+(i-1)*g1 : (i==length+2? max : p[i-2]));"+eol;
code += " double c = (i==0? min : (i>=length+1? max+(i-length-1)*g2 : p[i-1]));"+eol;
code += " double d = (i>=length? max+(i-length)*g2 : p[i]);"+eol;
code += " double xmax = (c*d - b*a)/(c+d-b-a);"+eol;
code += " if(x<a) return 0;"+eol;
code += " if(x<=b) return (x-a)*(x-a)/((b-a)*(c-a));"+eol;
code += " if(x<=xmax) return 1- (x-b)*(x-b)/((c-b)*(d-b)) - (x-c)*(x-c)/((c-b)*(c-a));"+eol;
code += " return (d-a)/(c+d-a-b);"+eol;
return code;
}
public String getSmeqCppCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (length>0? p[length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double b = (i<=1? min+(i-1)*g1 : (i==length+2? max : p[i-2]));"+eol;
code += " double c = (i==0? min : (i>=length+1? max+(i-length-1)*g2 : p[i-1]));"+eol;
code += " double d = (i>=length? max+(i-length)*g2 : p[i]);"+eol;
code += " double xmax = (c*d - b*a)/(c+d-b-a);"+eol;
code += " if(x<xmax) return (d-a)/(c+d-a-b);"+eol;
code += " if(x<=c) return 1- (x-b)*(x-b)/((c-b)*(d-b)) - (x-c)*(x-c)/((c-b)*(c-a));"+eol;
code += " if(x<=d) return (x-d)*(x-d)/((d-c)*(d-b));"+eol;
code += " return 0;"+eol;
return code;
}
public String getCenterCppCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (length>0? p[length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double b = (i<=1? min+(i-1)*g1 : (i==length+2? max : p[i-2]));"+eol;
code += " double c = (i==0? min : (i>=length+1? max+(i-length-1)*g2 : p[i-1]));"+eol;
code += " double d = (i>=length? max+(i-length)*g2 : p[i]);"+eol;
code += " return (c*d - b*a)/(c+d-b-a);"+eol;
return code;
}
public String getBasisCppCode() {
String eol = System.getProperty("line.separator", "\n");
String code = "";
code += " double g1 = (length>0? p[0] : max) - min;"+eol;
code += " double g2 = max - (length>0? p[length-1] : min);"+eol;
code += " double a = (i<=2? min+(i-2)*g1 : p[i-3]);"+eol;
code += " double d = (i>=length? max+(i-length)*g2 : p[i]);"+eol;
code += " return (d-a);"+eol;
return code;
}
}