public static void main(String[] args) { float f = 0.0f; float d = 1.0f/3.0f; int n = 10000; double errorMaximum = 0.0; float x = f; for (int i=0; i<n; ++i,x+=d) { double xd = f+i*d; errorMaximum = max(errorMaximum,abs(xd-x)); } double errorEstimate = FLT_EPSILON*n*(abs(f)+abs(f+(n-1)*d))/2.0; System.out.println("error estimate ="+errorEstimate/d); System.out.println("error maximum ="+errorMaximum/d); } }
xm = 0.5*(a+b), tol1 = EPS*abs(x)+tol/3.0, tol2 = 2.0*tol1; abs(x-xm) > tol2-0.5*(b-a); xm = 0.5*(a+b), tol1 = EPS*abs(x)+tol/3.0, tol2 = 2.0*tol1) { boolean gsstep = abs(e)<=tol1; if (q>0.0) p = -p; q = abs(q); r = e; e = d; if (abs(p)<abs(0.5*q*r) && p>q*(a-x) && p<q*(b-x)) { d = p/q; double u = x+d; double u = x+(abs(d)>=tol1?d:d>=0.0?tol1:-tol1); double fu = f(u);
final double sgng = gp * (ga / abs(ga)); double spf = sp; final double s = max(abs(theta), abs(ga), abs(gp)); double gamma = s * sqrt((theta / s) * (theta / s) - (ga / s) * (gp / s)); if (sp < sa) { final double spc = sa + r * (sp - sa); final double spq = sa + ((ga / ((fa - fp) / (sp - sa) + ga)) / 2.0) * (sp - sa); if (abs(spc - sa) < abs(spq - sa)) { spf = spc; } else { final double s = max(abs(theta), abs(ga), abs(gp)); double gamma = s * sqrt((theta / s) * (theta / s) - (ga / s) * (gp / s)); if (sp > sa) { final double spc = sp + r * (sa - sp); final double spq = sp + (gp / (gp - ga)) * (sa - sp); if (abs(spc - sp) > abs(spq - sp)) { spf = spc; } else { else if (abs(gp) < abs(ga)) { final double s = max(abs(theta), abs(ga), abs(gp)); if (abs(spc - sp) < abs(spq - sp)) { spf = spc;
float e = x20*x0p+y20*y0p+z20*z0p; float f = x0p*x0p+y0p*y0p+z0p*z0p; float det = abs(a*c-b*b); float s = b*e-c*d; float t = b*d-a*e;
/** * Constructs axis tics for a specified major tic interval. * @param x1 the value at one end of the axis. * @param x2 the value at the other end of the axis. * @param dtic the major tic interval; a positive number. */ public AxisTics(double x1, double x2, double dtic) { double xmin = min(x1,x2); double xmax = max(x1,x2); xmin -= (xmax-xmin)*FLT_EPSILON; xmax += (xmax-xmin)*FLT_EPSILON; double d = abs(dtic); double f = ceil(xmin/d)*d; //double f = ((int)(xmin/d)-1)*d; //while (f<xmin) // f += d; int n = 1+(int)((xmax-f)/d); _xmin = xmin; _xmax = xmax; _ntic = n; _dtic = d; _ftic = f; computeMultiple(); computeMinorTics(); }
private void testMT( LineSearch.Function func, LineSearch ls, double[] se, double[] ge, int[] ne) { double s = 1.0e-3; for (int ie=0; ie<se.length; ++ie,s*=100.0) { double[] fg = func.evaluate(0.0); double f = fg[0]; double g = fg[1]; double smin = 0.0; double smax = 4.0*max(1.0,s); LineSearch.Result lsr = ls.search(s,f,g,smin,smax); trace("s0="+s); trace(" s="+lsr.s+" f'(s)="+lsr.g + " ended="+lsr.ended + " neval="+lsr.neval); assertTrue(lsr.converged()); assertEquals(se[ie],lsr.s,0.1*abs(se[ie])); //assertEquals(ge[ie],lsr.g,0.1*abs(ge[ie])); assertEquals(ne[ie],lsr.neval); } }
assertEquals(0.0d,signum(0.0d)); assertEquals(2,abs(2)); assertEquals(2L,abs(2L)); assertEquals(2.0f,abs(2.0f)); assertEquals(2.0d,abs(2.0d)); assertEquals(2,abs(-2)); assertEquals(2L,abs(-2L)); assertEquals(2.0f,abs(-2.0f)); assertEquals(2.0d,abs(-2.0d)); assertEquals("abs(float) changed sign of 0", 0, Float.floatToIntBits(abs(0.0f))); assertEquals("abs(double) changed sign of 0", 0, Double.doubleToLongBits(abs(0.0d)));