Average Error: 19.0 → 10.8
Time: 5.8s
Precision: binary64
\[\]
\[\]
double code(double c0, double A, double V, double l) {
	return ((double) (c0 * ((double) sqrt(((double) (A / ((double) (V * l))))))));
}
double code(double c0, double A, double V, double l) {
	double VAR;
	if ((((double) (V * l)) <= -3.114203553728891e+188)) {
		VAR = ((double) (c0 / ((double) sqrt(((double) (V * ((double) (l / A))))))));
	} else {
		double VAR_1;
		if ((((double) (V * l)) <= -1.0425553254868156e-257)) {
			VAR_1 = ((double) (c0 * ((double) sqrt(((double) (A / ((double) (V * l))))))));
		} else {
			double VAR_2;
			if ((((double) (V * l)) <= 3.8846277012846e-317)) {
				VAR_2 = ((double) (((double) (c0 / ((double) sqrt(((double) sqrt(((double) (V * ((double) (l / A)))))))))) / ((double) sqrt(((double) sqrt(((double) (V * ((double) (l / A))))))))));
			} else {
				double VAR_3;
				if ((((double) (V * l)) <= 1.6951396814626267e+296)) {
					VAR_3 = ((double) (c0 / ((double) (((double) sqrt(((double) (V * l)))) / ((double) sqrt(A))))));
				} else {
					VAR_3 = ((double) (c0 * ((double) pow(((double) (V * ((double) (l / A)))), -0.5))));
				}
				VAR_2 = VAR_3;
			}
			VAR_1 = VAR_2;
		}
		VAR = VAR_1;
	}
	return VAR;
}

Error

Bits error versus c0

Bits error versus A

Bits error versus V

Bits error versus l

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 5 regimes
  2. if (* V l) < -3.1142035537288909e188

    1. Initial program 28.3

      \[\]
    2. Using strategy rm
    3. Applied clear-num28.6

      \[\leadsto \]
    4. Simplified19.8

      \[\leadsto \]
    5. Using strategy rm
    6. Applied sqrt-div19.8

      \[\leadsto \]
    7. Applied associate-*r/19.8

      \[\leadsto \]
    8. Simplified19.8

      \[\leadsto \]

    if -3.1142035537288909e188 < (* V l) < -1.04255532548681565e-257

    1. Initial program 7.6

      \[\]

    if -1.04255532548681565e-257 < (* V l) < 3.8846277e-317

    1. Initial program 55.5

      \[\]
    2. Using strategy rm
    3. Applied clear-num55.5

      \[\leadsto \]
    4. Simplified35.3

      \[\leadsto \]
    5. Using strategy rm
    6. Applied sqrt-div34.3

      \[\leadsto \]
    7. Applied associate-*r/34.3

      \[\leadsto \]
    8. Simplified34.3

      \[\leadsto \]
    9. Using strategy rm
    10. Applied add-sqr-sqrt34.4

      \[\leadsto \]
    11. Applied associate-/r*34.4

      \[\leadsto \]

    if 3.8846277e-317 < (* V l) < 1.6951396814626267e296

    1. Initial program 10.0

      \[\]
    2. Using strategy rm
    3. Applied clear-num10.4

      \[\leadsto \]
    4. Simplified16.7

      \[\leadsto \]
    5. Using strategy rm
    6. Applied sqrt-div16.5

      \[\leadsto \]
    7. Applied associate-*r/16.4

      \[\leadsto \]
    8. Simplified16.4

      \[\leadsto \]
    9. Using strategy rm
    10. Applied associate-*r/9.9

      \[\leadsto \]
    11. Applied sqrt-div0.5

      \[\leadsto \]

    if 1.6951396814626267e296 < (* V l)

    1. Initial program 40.4

      \[\]
    2. Using strategy rm
    3. Applied clear-num40.5

      \[\leadsto \]
    4. Simplified24.8

      \[\leadsto \]
    5. Using strategy rm
    6. Applied inv-pow24.8

      \[\leadsto \]
    7. Applied sqrt-pow124.8

      \[\leadsto \]
    8. Simplified24.8

      \[\leadsto \]
  3. Recombined 5 regimes into one program.
  4. Final simplification10.8

    \[\leadsto \]

Reproduce

herbie shell --seed 2020180 
(FPCore (c0 A V l)
  :name "Henrywood and Agarwal, Equation (3)"
  :precision binary64
  (* c0 (sqrt (/ A (* V l)))))