bug366 (missed optimization)

Percentage Accurate: 45.0% → 99.7%
Time: 10.3s
Alternatives: 5
Speedup: 32.0×

Specification

?
\[\begin{array}{l} \\ \sqrt{x \cdot x + \left(y \cdot y + z \cdot z\right)} \end{array} \]
(FPCore (x y z) :precision binary64 (sqrt (+ (* x x) (+ (* y y) (* z z)))))
double code(double x, double y, double z) {
	return sqrt(((x * x) + ((y * y) + (z * z))));
}
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(x, y, z)
use fmin_fmax_functions
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    code = sqrt(((x * x) + ((y * y) + (z * z))))
end function
public static double code(double x, double y, double z) {
	return Math.sqrt(((x * x) + ((y * y) + (z * z))));
}
def code(x, y, z):
	return math.sqrt(((x * x) + ((y * y) + (z * z))))
function code(x, y, z)
	return sqrt(Float64(Float64(x * x) + Float64(Float64(y * y) + Float64(z * z))))
end
function tmp = code(x, y, z)
	tmp = sqrt(((x * x) + ((y * y) + (z * z))));
end
code[x_, y_, z_] := N[Sqrt[N[(N[(x * x), $MachinePrecision] + N[(N[(y * y), $MachinePrecision] + N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}

\\
\sqrt{x \cdot x + \left(y \cdot y + z \cdot z\right)}
\end{array}

Sampling outcomes in binary64 precision:

Local Percentage Accuracy vs ?

The average percentage accuracy by input value. Horizontal axis shows value of an input variable; the variable is choosen in the title. Vertical axis is accuracy; higher is better. Red represent the original program, while blue represents Herbie's suggestion. These can be toggled with buttons below the plot. The line is an average while dots represent individual samples.

Accuracy vs Speed?

Herbie found 5 alternatives:

AlternativeAccuracySpeedup
The accuracy (vertical axis) and speed (horizontal axis) of each alternatives. Up and to the right is better. The red square shows the initial program, and each blue circle shows an alternative.The line shows the best available speed-accuracy tradeoffs.

Initial Program: 45.0% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \sqrt{x \cdot x + \left(y \cdot y + z \cdot z\right)} \end{array} \]
(FPCore (x y z) :precision binary64 (sqrt (+ (* x x) (+ (* y y) (* z z)))))
double code(double x, double y, double z) {
	return sqrt(((x * x) + ((y * y) + (z * z))));
}
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(x, y, z)
use fmin_fmax_functions
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    code = sqrt(((x * x) + ((y * y) + (z * z))))
end function
public static double code(double x, double y, double z) {
	return Math.sqrt(((x * x) + ((y * y) + (z * z))));
}
def code(x, y, z):
	return math.sqrt(((x * x) + ((y * y) + (z * z))))
function code(x, y, z)
	return sqrt(Float64(Float64(x * x) + Float64(Float64(y * y) + Float64(z * z))))
end
function tmp = code(x, y, z)
	tmp = sqrt(((x * x) + ((y * y) + (z * z))));
end
code[x_, y_, z_] := N[Sqrt[N[(N[(x * x), $MachinePrecision] + N[(N[(y * y), $MachinePrecision] + N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}

\\
\sqrt{x \cdot x + \left(y \cdot y + z \cdot z\right)}
\end{array}

Alternative 1: 99.7% accurate, 0.2× speedup?

\[\begin{array}{l} x_m = \left|x\right| \\ y_m = \left|y\right| \\ z_m = \left|z\right| \\ [x_m, y_m, z_m] = \mathsf{sort}([x_m, y_m, z_m])\\ \\ \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x\_m, z\_m\right) + \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right) \cdot \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right) \cdot -0.125\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right) + \mathsf{ratio\_of\_squares}\left(x\_m, z\_m\right)\right)}^{3} \cdot 0.0625 - -0.5 \cdot \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right)\right) \cdot z\_m \end{array} \]
x_m = (fabs.f64 x)
y_m = (fabs.f64 y)
z_m = (fabs.f64 z)
NOTE: x_m, y_m, and z_m should be sorted in increasing order before calling this function.
(FPCore (x_m y_m z_m)
 :precision binary64
 (*
  (+
   (+
    1.0
    (*
     (*
      (+ (ratio-of-squares x_m z_m) (ratio-of-squares y_m z_m))
      (ratio-of-squares y_m z_m))
     -0.125))
   (-
    (*
     (pow (+ (ratio-of-squares y_m z_m) (ratio-of-squares x_m z_m)) 3.0)
     0.0625)
    (* -0.5 (ratio-of-squares y_m z_m))))
  z_m))
\begin{array}{l}
x_m = \left|x\right|
\\
y_m = \left|y\right|
\\
z_m = \left|z\right|
\\
[x_m, y_m, z_m] = \mathsf{sort}([x_m, y_m, z_m])\\
\\
\left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x\_m, z\_m\right) + \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right) \cdot \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right) \cdot -0.125\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right) + \mathsf{ratio\_of\_squares}\left(x\_m, z\_m\right)\right)}^{3} \cdot 0.0625 - -0.5 \cdot \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right)\right) \cdot z\_m
\end{array}
Derivation
  1. Initial program 43.4%

    \[\sqrt{x \cdot x + \left(y \cdot y + z \cdot z\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in z around inf

    \[\leadsto \color{blue}{z \cdot \left(1 + \left(\frac{-1}{8} \cdot \frac{{\left({x}^{2} + {y}^{2}\right)}^{2}}{{z}^{4}} + \left(\frac{1}{16} \cdot \frac{{\left({x}^{2} + {y}^{2}\right)}^{3}}{{z}^{6}} + \frac{1}{2} \cdot \frac{{x}^{2} + {y}^{2}}{{z}^{2}}\right)\right)\right)} \]
  4. Applied rewrites19.0%

    \[\leadsto \color{blue}{\left(\left(1 + {\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{2} \cdot -0.125\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot 0.0625 - -0.5 \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z} \]
  5. Step-by-step derivation
    1. lift-pow.f64N/A

      \[\leadsto \left(\left(1 + {\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{2} \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    2. lift-+.f64N/A

      \[\leadsto \left(\left(1 + {\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{2} \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    3. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + {\left(\frac{y \cdot y}{z \cdot z} + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{2} \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    4. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + {\left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)}^{2} \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    5. unpow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    6. lower-*.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    7. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{{y}^{2}}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    8. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{{y}^{2}}{{z}^{2}} + \frac{x \cdot x}{z \cdot z}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    9. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{{y}^{2}}{{z}^{2}} + \frac{{x}^{2}}{z \cdot z}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    10. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{{y}^{2}}{{z}^{2}} + \frac{{x}^{2}}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    11. +-commutativeN/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{{x}^{2}}{{z}^{2}} + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    12. lower-+.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{{x}^{2}}{{z}^{2}} + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    13. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{x \cdot x}{{z}^{2}} + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    14. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{x \cdot x}{z \cdot z} + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    15. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    16. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \frac{y \cdot y}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    17. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \frac{y \cdot y}{z \cdot z}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    18. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
  6. Applied rewrites19.0%

    \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot -0.125\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot 0.0625 - -0.5 \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
  7. Taylor expanded in x around 0

    \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \frac{{y}^{2}}{{z}^{2}}\right)\right) \cdot z \]
  8. Step-by-step derivation
    1. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \frac{y \cdot y}{{z}^{2}}\right)\right) \cdot z \]
    2. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \frac{y \cdot y}{z \cdot z}\right)\right) \cdot z \]
    3. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
    4. lower-*.f6418.8

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot -0.125\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot 0.0625 - -0.5 \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
  9. Applied rewrites18.8%

    \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot -0.125\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot 0.0625 - -0.5 \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
  10. Taylor expanded in x around 0

    \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
  11. Step-by-step derivation
    1. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
    2. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
    3. +-commutativeN/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
    4. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
    5. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
    6. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{y \cdot y}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
    7. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{y \cdot y}{z \cdot z}\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
    8. lift-ratio-of-squares.f6418.8

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot -0.125\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot 0.0625 - -0.5 \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
  12. Applied rewrites18.8%

    \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot -0.125\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot 0.0625 - -0.5 \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot z \]
  13. Add Preprocessing

Alternative 2: 99.6% accurate, 0.7× speedup?

\[\begin{array}{l} x_m = \left|x\right| \\ y_m = \left|y\right| \\ z_m = \left|z\right| \\ [x_m, y_m, z_m] = \mathsf{sort}([x_m, y_m, z_m])\\ \\ \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x\_m, z\_m\right) + \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right) \cdot \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right) \cdot -0.125\right) + \left(\mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right) + \mathsf{ratio\_of\_squares}\left(x\_m, z\_m\right)\right) \cdot 0.5\right) \cdot z\_m \end{array} \]
x_m = (fabs.f64 x)
y_m = (fabs.f64 y)
z_m = (fabs.f64 z)
NOTE: x_m, y_m, and z_m should be sorted in increasing order before calling this function.
(FPCore (x_m y_m z_m)
 :precision binary64
 (*
  (+
   (+
    1.0
    (*
     (*
      (+ (ratio-of-squares x_m z_m) (ratio-of-squares y_m z_m))
      (ratio-of-squares y_m z_m))
     -0.125))
   (* (+ (ratio-of-squares y_m z_m) (ratio-of-squares x_m z_m)) 0.5))
  z_m))
\begin{array}{l}
x_m = \left|x\right|
\\
y_m = \left|y\right|
\\
z_m = \left|z\right|
\\
[x_m, y_m, z_m] = \mathsf{sort}([x_m, y_m, z_m])\\
\\
\left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x\_m, z\_m\right) + \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right) \cdot \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right) \cdot -0.125\right) + \left(\mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right) + \mathsf{ratio\_of\_squares}\left(x\_m, z\_m\right)\right) \cdot 0.5\right) \cdot z\_m
\end{array}
Derivation
  1. Initial program 43.4%

    \[\sqrt{x \cdot x + \left(y \cdot y + z \cdot z\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in z around inf

    \[\leadsto \color{blue}{z \cdot \left(1 + \left(\frac{-1}{8} \cdot \frac{{\left({x}^{2} + {y}^{2}\right)}^{2}}{{z}^{4}} + \left(\frac{1}{16} \cdot \frac{{\left({x}^{2} + {y}^{2}\right)}^{3}}{{z}^{6}} + \frac{1}{2} \cdot \frac{{x}^{2} + {y}^{2}}{{z}^{2}}\right)\right)\right)} \]
  4. Applied rewrites19.0%

    \[\leadsto \color{blue}{\left(\left(1 + {\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{2} \cdot -0.125\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot 0.0625 - -0.5 \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z} \]
  5. Step-by-step derivation
    1. lift-pow.f64N/A

      \[\leadsto \left(\left(1 + {\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{2} \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    2. lift-+.f64N/A

      \[\leadsto \left(\left(1 + {\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{2} \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    3. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + {\left(\frac{y \cdot y}{z \cdot z} + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{2} \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    4. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + {\left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)}^{2} \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    5. unpow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    6. lower-*.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    7. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{{y}^{2}}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    8. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{{y}^{2}}{{z}^{2}} + \frac{x \cdot x}{z \cdot z}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    9. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{{y}^{2}}{{z}^{2}} + \frac{{x}^{2}}{z \cdot z}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    10. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{{y}^{2}}{{z}^{2}} + \frac{{x}^{2}}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    11. +-commutativeN/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{{x}^{2}}{{z}^{2}} + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    12. lower-+.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{{x}^{2}}{{z}^{2}} + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    13. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{x \cdot x}{{z}^{2}} + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    14. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\frac{x \cdot x}{z \cdot z} + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    15. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    16. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \frac{y \cdot y}{{z}^{2}}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    17. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \frac{y \cdot y}{z \cdot z}\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
    18. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot \frac{-1}{8}\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot \frac{1}{16} - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
  6. Applied rewrites19.0%

    \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot -0.125\right) + \left({\left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)}^{3} \cdot 0.0625 - -0.5 \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right)\right) \cdot z \]
  7. Taylor expanded in z around inf

    \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \frac{1}{2} \cdot \frac{{x}^{2} + {y}^{2}}{{z}^{2}}\right) \cdot z \]
  8. Step-by-step derivation
    1. *-commutativeN/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \frac{{x}^{2} + {y}^{2}}{{z}^{2}} \cdot \frac{1}{2}\right) \cdot z \]
    2. div-add-revN/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left(\frac{{x}^{2}}{{z}^{2}} + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{1}{2}\right) \cdot z \]
    3. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left(\frac{x \cdot x}{{z}^{2}} + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{1}{2}\right) \cdot z \]
    4. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left(\frac{x \cdot x}{z \cdot z} + \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{1}{2}\right) \cdot z \]
    5. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left(\frac{x \cdot x}{z \cdot z} + \frac{y \cdot y}{{z}^{2}}\right) \cdot \frac{1}{2}\right) \cdot z \]
    6. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left(\frac{x \cdot x}{z \cdot z} + \frac{y \cdot y}{z \cdot z}\right) \cdot \frac{1}{2}\right) \cdot z \]
    7. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \frac{y \cdot y}{z \cdot z}\right) \cdot \frac{1}{2}\right) \cdot z \]
    8. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{1}{2}\right) \cdot z \]
    9. lift-+.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{1}{2}\right) \cdot z \]
    10. lift-*.f6419.3

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot -0.125\right) + \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot 0.5\right) \cdot z \]
    11. lift-+.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{1}{2}\right) \cdot z \]
    12. +-commutativeN/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot \frac{1}{2}\right) \cdot z \]
    13. lift-+.f6419.3

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot -0.125\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot 0.5\right) \cdot z \]
  9. Applied rewrites19.3%

    \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right)\right) \cdot -0.125\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot 0.5\right) \cdot z \]
  10. Taylor expanded in x around 0

    \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot \frac{1}{2}\right) \cdot z \]
  11. Step-by-step derivation
    1. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot \frac{1}{2}\right) \cdot z \]
    2. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot \frac{1}{2}\right) \cdot z \]
    3. +-commutativeN/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot \frac{1}{2}\right) \cdot z \]
    4. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot \frac{1}{2}\right) \cdot z \]
    5. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot \frac{1}{2}\right) \cdot z \]
    6. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{y \cdot y}{{z}^{2}}\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot \frac{1}{2}\right) \cdot z \]
    7. pow2N/A

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \frac{y \cdot y}{z \cdot z}\right) \cdot \frac{-1}{8}\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot \frac{1}{2}\right) \cdot z \]
    8. lift-ratio-of-squares.f6419.2

      \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot -0.125\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot 0.5\right) \cdot z \]
  12. Applied rewrites19.2%

    \[\leadsto \left(\left(1 + \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot -0.125\right) + \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right) \cdot 0.5\right) \cdot z \]
  13. Add Preprocessing

Alternative 3: 99.4% accurate, 1.9× speedup?

\[\begin{array}{l} x_m = \left|x\right| \\ y_m = \left|y\right| \\ z_m = \left|z\right| \\ [x_m, y_m, z_m] = \mathsf{sort}([x_m, y_m, z_m])\\ \\ \left(0.5 \cdot \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right) \cdot z\_m + z\_m \end{array} \]
x_m = (fabs.f64 x)
y_m = (fabs.f64 y)
z_m = (fabs.f64 z)
NOTE: x_m, y_m, and z_m should be sorted in increasing order before calling this function.
(FPCore (x_m y_m z_m)
 :precision binary64
 (+ (* (* 0.5 (ratio-of-squares y_m z_m)) z_m) z_m))
\begin{array}{l}
x_m = \left|x\right|
\\
y_m = \left|y\right|
\\
z_m = \left|z\right|
\\
[x_m, y_m, z_m] = \mathsf{sort}([x_m, y_m, z_m])\\
\\
\left(0.5 \cdot \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right) \cdot z\_m + z\_m
\end{array}
Derivation
  1. Initial program 43.4%

    \[\sqrt{x \cdot x + \left(y \cdot y + z \cdot z\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in z around inf

    \[\leadsto \color{blue}{z \cdot \left(1 + \frac{1}{2} \cdot \frac{{x}^{2} + {y}^{2}}{{z}^{2}}\right)} \]
  4. Step-by-step derivation
    1. *-commutativeN/A

      \[\leadsto \left(1 + \frac{1}{2} \cdot \frac{{x}^{2} + {y}^{2}}{{z}^{2}}\right) \cdot \color{blue}{z} \]
    2. lower-*.f64N/A

      \[\leadsto \left(1 + \frac{1}{2} \cdot \frac{{x}^{2} + {y}^{2}}{{z}^{2}}\right) \cdot \color{blue}{z} \]
  5. Applied rewrites20.7%

    \[\leadsto \color{blue}{\left(1 - -0.5 \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right) \cdot z} \]
  6. Step-by-step derivation
    1. lift-*.f64N/A

      \[\leadsto \left(1 - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right) \cdot \color{blue}{z} \]
    2. lift--.f64N/A

      \[\leadsto \left(1 - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right) \cdot z \]
    3. lift-*.f64N/A

      \[\leadsto \left(1 - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right) \cdot z \]
    4. lift-+.f64N/A

      \[\leadsto \left(1 - \frac{-1}{2} \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right) \cdot z \]
    5. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(1 - \frac{-1}{2} \cdot \left(\frac{y \cdot y}{z \cdot z} + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right) \cdot z \]
    6. lift-ratio-of-squares.f64N/A

      \[\leadsto \left(1 - \frac{-1}{2} \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot z \]
    7. fp-cancel-sub-sign-invN/A

      \[\leadsto \left(1 + \left(\mathsf{neg}\left(\frac{-1}{2}\right)\right) \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot z \]
    8. metadata-evalN/A

      \[\leadsto \left(1 + \frac{1}{2} \cdot \left(\frac{y \cdot y}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot z \]
    9. pow2N/A

      \[\leadsto \left(1 + \frac{1}{2} \cdot \left(\frac{{y}^{2}}{z \cdot z} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot z \]
    10. pow2N/A

      \[\leadsto \left(1 + \frac{1}{2} \cdot \left(\frac{{y}^{2}}{{z}^{2}} + \frac{x \cdot x}{z \cdot z}\right)\right) \cdot z \]
    11. pow2N/A

      \[\leadsto \left(1 + \frac{1}{2} \cdot \left(\frac{{y}^{2}}{{z}^{2}} + \frac{{x}^{2}}{z \cdot z}\right)\right) \cdot z \]
    12. pow2N/A

      \[\leadsto \left(1 + \frac{1}{2} \cdot \left(\frac{{y}^{2}}{{z}^{2}} + \frac{{x}^{2}}{{z}^{2}}\right)\right) \cdot z \]
    13. div-add-revN/A

      \[\leadsto \left(1 + \frac{1}{2} \cdot \frac{{y}^{2} + {x}^{2}}{{z}^{2}}\right) \cdot z \]
    14. +-commutativeN/A

      \[\leadsto \left(1 + \frac{1}{2} \cdot \frac{{x}^{2} + {y}^{2}}{{z}^{2}}\right) \cdot z \]
  7. Applied rewrites20.7%

    \[\leadsto z \cdot 1 + \color{blue}{z \cdot \left(\left(\mathsf{ratio\_of\_squares}\left(x, z\right) + \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot 0.5\right)} \]
  8. Taylor expanded in x around 0

    \[\leadsto z \cdot 1 + z \cdot \left(\frac{1}{2} \cdot \color{blue}{\frac{{y}^{2}}{{z}^{2}}}\right) \]
  9. Step-by-step derivation
    1. pow2N/A

      \[\leadsto z \cdot 1 + z \cdot \left(\frac{1}{2} \cdot \frac{y \cdot y}{{z}^{2}}\right) \]
    2. pow2N/A

      \[\leadsto z \cdot 1 + z \cdot \left(\frac{1}{2} \cdot \frac{y \cdot y}{z \cdot z}\right) \]
    3. lift-ratio-of-squares.f64N/A

      \[\leadsto z \cdot 1 + z \cdot \left(\frac{1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \]
    4. lower-*.f6420.6

      \[\leadsto z \cdot 1 + z \cdot \left(0.5 \cdot \mathsf{ratio\_of\_squares}\left(y, \color{blue}{z}\right)\right) \]
  10. Applied rewrites20.6%

    \[\leadsto z \cdot 1 + z \cdot \left(0.5 \cdot \color{blue}{\mathsf{ratio\_of\_squares}\left(y, z\right)}\right) \]
  11. Step-by-step derivation
    1. lift-+.f64N/A

      \[\leadsto z \cdot 1 + \color{blue}{z \cdot \left(\frac{1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right)} \]
    2. lift-*.f64N/A

      \[\leadsto z \cdot 1 + \color{blue}{z} \cdot \left(\frac{1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \]
    3. *-rgt-identityN/A

      \[\leadsto z + \color{blue}{z} \cdot \left(\frac{1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \]
    4. +-commutativeN/A

      \[\leadsto z \cdot \left(\frac{1}{2} \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right) + \color{blue}{z} \]
    5. lower-+.f6420.6

      \[\leadsto z \cdot \left(0.5 \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right) + \color{blue}{z} \]
  12. Applied rewrites20.6%

    \[\leadsto \left(0.5 \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot z + \color{blue}{z} \]
  13. Add Preprocessing

Alternative 4: 99.4% accurate, 1.9× speedup?

\[\begin{array}{l} x_m = \left|x\right| \\ y_m = \left|y\right| \\ z_m = \left|z\right| \\ [x_m, y_m, z_m] = \mathsf{sort}([x_m, y_m, z_m])\\ \\ \left(1 - -0.5 \cdot \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right) \cdot z\_m \end{array} \]
x_m = (fabs.f64 x)
y_m = (fabs.f64 y)
z_m = (fabs.f64 z)
NOTE: x_m, y_m, and z_m should be sorted in increasing order before calling this function.
(FPCore (x_m y_m z_m)
 :precision binary64
 (* (- 1.0 (* -0.5 (ratio-of-squares y_m z_m))) z_m))
\begin{array}{l}
x_m = \left|x\right|
\\
y_m = \left|y\right|
\\
z_m = \left|z\right|
\\
[x_m, y_m, z_m] = \mathsf{sort}([x_m, y_m, z_m])\\
\\
\left(1 - -0.5 \cdot \mathsf{ratio\_of\_squares}\left(y\_m, z\_m\right)\right) \cdot z\_m
\end{array}
Derivation
  1. Initial program 43.4%

    \[\sqrt{x \cdot x + \left(y \cdot y + z \cdot z\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in z around inf

    \[\leadsto \color{blue}{z \cdot \left(1 + \frac{1}{2} \cdot \frac{{x}^{2} + {y}^{2}}{{z}^{2}}\right)} \]
  4. Step-by-step derivation
    1. *-commutativeN/A

      \[\leadsto \left(1 + \frac{1}{2} \cdot \frac{{x}^{2} + {y}^{2}}{{z}^{2}}\right) \cdot \color{blue}{z} \]
    2. lower-*.f64N/A

      \[\leadsto \left(1 + \frac{1}{2} \cdot \frac{{x}^{2} + {y}^{2}}{{z}^{2}}\right) \cdot \color{blue}{z} \]
  5. Applied rewrites20.7%

    \[\leadsto \color{blue}{\left(1 - -0.5 \cdot \left(\mathsf{ratio\_of\_squares}\left(y, z\right) + \mathsf{ratio\_of\_squares}\left(x, z\right)\right)\right) \cdot z} \]
  6. Taylor expanded in x around 0

    \[\leadsto \left(1 - \frac{-1}{2} \cdot \frac{{y}^{2}}{{z}^{2}}\right) \cdot z \]
  7. Step-by-step derivation
    1. pow2N/A

      \[\leadsto \left(1 - \frac{-1}{2} \cdot \frac{y \cdot y}{{z}^{2}}\right) \cdot z \]
    2. pow2N/A

      \[\leadsto \left(1 - \frac{-1}{2} \cdot \frac{y \cdot y}{z \cdot z}\right) \cdot z \]
    3. lift-ratio-of-squares.f6420.6

      \[\leadsto \left(1 - -0.5 \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot z \]
  8. Applied rewrites20.6%

    \[\leadsto \left(1 - -0.5 \cdot \mathsf{ratio\_of\_squares}\left(y, z\right)\right) \cdot z \]
  9. Add Preprocessing

Alternative 5: 98.6% accurate, 32.0× speedup?

\[\begin{array}{l} x_m = \left|x\right| \\ y_m = \left|y\right| \\ z_m = \left|z\right| \\ [x_m, y_m, z_m] = \mathsf{sort}([x_m, y_m, z_m])\\ \\ z\_m \end{array} \]
x_m = (fabs.f64 x)
y_m = (fabs.f64 y)
z_m = (fabs.f64 z)
NOTE: x_m, y_m, and z_m should be sorted in increasing order before calling this function.
(FPCore (x_m y_m z_m) :precision binary64 z_m)
x_m = fabs(x);
y_m = fabs(y);
z_m = fabs(z);
assert(x_m < y_m && y_m < z_m);
double code(double x_m, double y_m, double z_m) {
	return z_m;
}
x_m =     private
y_m =     private
z_m =     private
NOTE: x_m, y_m, and z_m should be sorted in increasing order before calling this function.
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(x_m, y_m, z_m)
use fmin_fmax_functions
    real(8), intent (in) :: x_m
    real(8), intent (in) :: y_m
    real(8), intent (in) :: z_m
    code = z_m
end function
x_m = Math.abs(x);
y_m = Math.abs(y);
z_m = Math.abs(z);
assert x_m < y_m && y_m < z_m;
public static double code(double x_m, double y_m, double z_m) {
	return z_m;
}
x_m = math.fabs(x)
y_m = math.fabs(y)
z_m = math.fabs(z)
[x_m, y_m, z_m] = sort([x_m, y_m, z_m])
def code(x_m, y_m, z_m):
	return z_m
x_m = abs(x)
y_m = abs(y)
z_m = abs(z)
x_m, y_m, z_m = sort([x_m, y_m, z_m])
function code(x_m, y_m, z_m)
	return z_m
end
x_m = abs(x);
y_m = abs(y);
z_m = abs(z);
x_m, y_m, z_m = num2cell(sort([x_m, y_m, z_m])){:}
function tmp = code(x_m, y_m, z_m)
	tmp = z_m;
end
x_m = N[Abs[x], $MachinePrecision]
y_m = N[Abs[y], $MachinePrecision]
z_m = N[Abs[z], $MachinePrecision]
NOTE: x_m, y_m, and z_m should be sorted in increasing order before calling this function.
code[x$95$m_, y$95$m_, z$95$m_] := z$95$m
\begin{array}{l}
x_m = \left|x\right|
\\
y_m = \left|y\right|
\\
z_m = \left|z\right|
\\
[x_m, y_m, z_m] = \mathsf{sort}([x_m, y_m, z_m])\\
\\
z\_m
\end{array}
Derivation
  1. Initial program 43.4%

    \[\sqrt{x \cdot x + \left(y \cdot y + z \cdot z\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in z around inf

    \[\leadsto \color{blue}{z} \]
  4. Step-by-step derivation
    1. Applied rewrites20.3%

      \[\leadsto \color{blue}{z} \]
    2. Add Preprocessing

    Reproduce

    ?
    herbie shell --seed 2025058 
    (FPCore (x y z)
      :name "bug366 (missed optimization)"
      :precision binary64
    
      :alt
      (! :herbie-platform default (hypot x (hypot y z)))
    
      (sqrt (+ (* x x) (+ (* y y) (* z z)))))