sqrt B (should all be same)

Percentage Accurate: 54.7% → 99.6%
Time: 14.0s
Alternatives: 4
Speedup: 1.3×

Specification

?
\[\begin{array}{l} \\ \sqrt{\left(2 \cdot x\right) \cdot x} \end{array} \]
(FPCore (x) :precision binary64 (sqrt (* (* 2.0 x) x)))
double code(double x) {
	return sqrt(((2.0 * x) * x));
}
real(8) function code(x)
    real(8), intent (in) :: x
    code = sqrt(((2.0d0 * x) * x))
end function
public static double code(double x) {
	return Math.sqrt(((2.0 * x) * x));
}
def code(x):
	return math.sqrt(((2.0 * x) * x))
function code(x)
	return sqrt(Float64(Float64(2.0 * x) * x))
end
function tmp = code(x)
	tmp = sqrt(((2.0 * x) * x));
end
code[x_] := N[Sqrt[N[(N[(2.0 * x), $MachinePrecision] * x), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}

\\
\sqrt{\left(2 \cdot x\right) \cdot x}
\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 4 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: 54.7% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \sqrt{\left(2 \cdot x\right) \cdot x} \end{array} \]
(FPCore (x) :precision binary64 (sqrt (* (* 2.0 x) x)))
double code(double x) {
	return sqrt(((2.0 * x) * x));
}
real(8) function code(x)
    real(8), intent (in) :: x
    code = sqrt(((2.0d0 * x) * x))
end function
public static double code(double x) {
	return Math.sqrt(((2.0 * x) * x));
}
def code(x):
	return math.sqrt(((2.0 * x) * x))
function code(x)
	return sqrt(Float64(Float64(2.0 * x) * x))
end
function tmp = code(x)
	tmp = sqrt(((2.0 * x) * x));
end
code[x_] := N[Sqrt[N[(N[(2.0 * x), $MachinePrecision] * x), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}

\\
\sqrt{\left(2 \cdot x\right) \cdot x}
\end{array}

Alternative 1: 99.6% accurate, 0.1× speedup?

\[\begin{array}{l} x_m = \left|x\right| \\ {16777216}^{0.015625} \cdot \left({65536}^{0.0078125} \cdot x\_m\right) \end{array} \]
x_m = (fabs.f64 x)
(FPCore (x_m)
 :precision binary64
 (* (pow 16777216.0 0.015625) (* (pow 65536.0 0.0078125) x_m)))
x_m = fabs(x);
double code(double x_m) {
	return pow(16777216.0, 0.015625) * (pow(65536.0, 0.0078125) * x_m);
}
x_m = abs(x)
real(8) function code(x_m)
    real(8), intent (in) :: x_m
    code = (16777216.0d0 ** 0.015625d0) * ((65536.0d0 ** 0.0078125d0) * x_m)
end function
x_m = Math.abs(x);
public static double code(double x_m) {
	return Math.pow(16777216.0, 0.015625) * (Math.pow(65536.0, 0.0078125) * x_m);
}
x_m = math.fabs(x)
def code(x_m):
	return math.pow(16777216.0, 0.015625) * (math.pow(65536.0, 0.0078125) * x_m)
x_m = abs(x)
function code(x_m)
	return Float64((16777216.0 ^ 0.015625) * Float64((65536.0 ^ 0.0078125) * x_m))
end
x_m = abs(x);
function tmp = code(x_m)
	tmp = (16777216.0 ^ 0.015625) * ((65536.0 ^ 0.0078125) * x_m);
end
x_m = N[Abs[x], $MachinePrecision]
code[x$95$m_] := N[(N[Power[16777216.0, 0.015625], $MachinePrecision] * N[(N[Power[65536.0, 0.0078125], $MachinePrecision] * x$95$m), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
x_m = \left|x\right|

\\
{16777216}^{0.015625} \cdot \left({65536}^{0.0078125} \cdot x\_m\right)
\end{array}
Derivation
  1. Initial program 55.7%

    \[\sqrt{\left(2 \cdot x\right) \cdot x} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-sqrt.f64N/A

      \[\leadsto \color{blue}{\sqrt{\left(2 \cdot x\right) \cdot x}} \]
    2. pow1/2N/A

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

      \[\leadsto {\color{blue}{\left(\left(2 \cdot x\right) \cdot x\right)}}^{\frac{1}{2}} \]
    4. unpow-prod-downN/A

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

      \[\leadsto \color{blue}{{\left(2 \cdot x\right)}^{\frac{1}{2}} \cdot {x}^{\frac{1}{2}}} \]
    6. pow1/2N/A

      \[\leadsto \color{blue}{\sqrt{2 \cdot x}} \cdot {x}^{\frac{1}{2}} \]
    7. lower-sqrt.f64N/A

      \[\leadsto \color{blue}{\sqrt{2 \cdot x}} \cdot {x}^{\frac{1}{2}} \]
    8. lift-*.f64N/A

      \[\leadsto \sqrt{\color{blue}{2 \cdot x}} \cdot {x}^{\frac{1}{2}} \]
    9. *-commutativeN/A

      \[\leadsto \sqrt{\color{blue}{x \cdot 2}} \cdot {x}^{\frac{1}{2}} \]
    10. lower-*.f64N/A

      \[\leadsto \sqrt{\color{blue}{x \cdot 2}} \cdot {x}^{\frac{1}{2}} \]
    11. pow1/2N/A

      \[\leadsto \sqrt{x \cdot 2} \cdot \color{blue}{\sqrt{x}} \]
    12. lower-sqrt.f6455.5

      \[\leadsto \sqrt{x \cdot 2} \cdot \color{blue}{\sqrt{x}} \]
  4. Applied rewrites55.5%

    \[\leadsto \color{blue}{\sqrt{x \cdot 2} \cdot \sqrt{x}} \]
  5. Step-by-step derivation
    1. lift-sqrt.f64N/A

      \[\leadsto \color{blue}{\sqrt{x \cdot 2}} \cdot \sqrt{x} \]
    2. lift-*.f64N/A

      \[\leadsto \sqrt{\color{blue}{x \cdot 2}} \cdot \sqrt{x} \]
    3. sqrt-prodN/A

      \[\leadsto \color{blue}{\left(\sqrt{x} \cdot \sqrt{2}\right)} \cdot \sqrt{x} \]
    4. lift-sqrt.f64N/A

      \[\leadsto \left(\color{blue}{\sqrt{x}} \cdot \sqrt{2}\right) \cdot \sqrt{x} \]
    5. pow1/2N/A

      \[\leadsto \left(\sqrt{x} \cdot \color{blue}{{2}^{\frac{1}{2}}}\right) \cdot \sqrt{x} \]
    6. metadata-evalN/A

      \[\leadsto \left(\sqrt{x} \cdot {2}^{\color{blue}{\left(\frac{1}{4} + \frac{1}{4}\right)}}\right) \cdot \sqrt{x} \]
    7. pow-prod-upN/A

      \[\leadsto \left(\sqrt{x} \cdot \color{blue}{\left({2}^{\frac{1}{4}} \cdot {2}^{\frac{1}{4}}\right)}\right) \cdot \sqrt{x} \]
    8. pow-prod-downN/A

      \[\leadsto \left(\sqrt{x} \cdot \color{blue}{{\left(2 \cdot 2\right)}^{\frac{1}{4}}}\right) \cdot \sqrt{x} \]
    9. metadata-evalN/A

      \[\leadsto \left(\sqrt{x} \cdot {\color{blue}{4}}^{\frac{1}{4}}\right) \cdot \sqrt{x} \]
    10. pow-to-expN/A

      \[\leadsto \left(\sqrt{x} \cdot \color{blue}{e^{\log 4 \cdot \frac{1}{4}}}\right) \cdot \sqrt{x} \]
    11. metadata-evalN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\log 4 \cdot \color{blue}{\left(\frac{1}{8} + \frac{1}{8}\right)}}\right) \cdot \sqrt{x} \]
    12. distribute-lft-outN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\color{blue}{\log 4 \cdot \frac{1}{8} + \log 4 \cdot \frac{1}{8}}}\right) \cdot \sqrt{x} \]
    13. flip-+N/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\color{blue}{\frac{\left(\log 4 \cdot \frac{1}{8}\right) \cdot \left(\log 4 \cdot \frac{1}{8}\right) - \left(\log 4 \cdot \frac{1}{8}\right) \cdot \left(\log 4 \cdot \frac{1}{8}\right)}{\log 4 \cdot \frac{1}{8} - \log 4 \cdot \frac{1}{8}}}}\right) \cdot \sqrt{x} \]
    14. +-inversesN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\frac{\color{blue}{0}}{\log 4 \cdot \frac{1}{8} - \log 4 \cdot \frac{1}{8}}}\right) \cdot \sqrt{x} \]
    15. +-inversesN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\frac{\color{blue}{\left(\log x \cdot \frac{3}{8}\right) \cdot \left(\log x \cdot \frac{3}{8}\right) - \left(\log x \cdot \frac{3}{8}\right) \cdot \left(\log x \cdot \frac{3}{8}\right)}}{\log 4 \cdot \frac{1}{8} - \log 4 \cdot \frac{1}{8}}}\right) \cdot \sqrt{x} \]
    16. +-inversesN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\frac{\left(\log x \cdot \frac{3}{8}\right) \cdot \left(\log x \cdot \frac{3}{8}\right) - \left(\log x \cdot \frac{3}{8}\right) \cdot \left(\log x \cdot \frac{3}{8}\right)}{\color{blue}{0}}}\right) \cdot \sqrt{x} \]
    17. +-inversesN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\frac{\left(\log x \cdot \frac{3}{8}\right) \cdot \left(\log x \cdot \frac{3}{8}\right) - \left(\log x \cdot \frac{3}{8}\right) \cdot \left(\log x \cdot \frac{3}{8}\right)}{\color{blue}{\log x \cdot \frac{3}{8} - \log x \cdot \frac{3}{8}}}}\right) \cdot \sqrt{x} \]
    18. flip-+N/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\color{blue}{\log x \cdot \frac{3}{8} + \log x \cdot \frac{3}{8}}}\right) \cdot \sqrt{x} \]
    19. distribute-lft-outN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\color{blue}{\log x \cdot \left(\frac{3}{8} + \frac{3}{8}\right)}}\right) \cdot \sqrt{x} \]
    20. metadata-evalN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\log x \cdot \color{blue}{\frac{3}{4}}}\right) \cdot \sqrt{x} \]
    21. pow-to-expN/A

      \[\leadsto \left(\sqrt{x} \cdot \color{blue}{{x}^{\frac{3}{4}}}\right) \cdot \sqrt{x} \]
    22. lift-pow.f64N/A

      \[\leadsto \left(\sqrt{x} \cdot \color{blue}{{x}^{\frac{3}{4}}}\right) \cdot \sqrt{x} \]
  6. Applied rewrites55.3%

    \[\leadsto \color{blue}{\left(\sqrt{x} \cdot \sqrt{2}\right)} \cdot \sqrt{x} \]
  7. Step-by-step derivation
    1. lift-*.f64N/A

      \[\leadsto \color{blue}{\left(\sqrt{x} \cdot \sqrt{2}\right) \cdot \sqrt{x}} \]
    2. lift-*.f64N/A

      \[\leadsto \color{blue}{\left(\sqrt{x} \cdot \sqrt{2}\right)} \cdot \sqrt{x} \]
    3. *-commutativeN/A

      \[\leadsto \color{blue}{\left(\sqrt{2} \cdot \sqrt{x}\right)} \cdot \sqrt{x} \]
    4. associate-*l*N/A

      \[\leadsto \color{blue}{\sqrt{2} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right)} \]
    5. lift-sqrt.f64N/A

      \[\leadsto \color{blue}{\sqrt{2}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    6. pow1/2N/A

      \[\leadsto \color{blue}{{2}^{\frac{1}{2}}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    7. metadata-evalN/A

      \[\leadsto {2}^{\color{blue}{\left(2 \cdot \frac{1}{4}\right)}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    8. metadata-evalN/A

      \[\leadsto {2}^{\left(2 \cdot \color{blue}{\left(\frac{1}{2} \cdot \frac{1}{2}\right)}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    9. pow-sqrN/A

      \[\leadsto \color{blue}{\left({2}^{\left(\frac{1}{2} \cdot \frac{1}{2}\right)} \cdot {2}^{\left(\frac{1}{2} \cdot \frac{1}{2}\right)}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    10. pow-prod-downN/A

      \[\leadsto \color{blue}{{\left(2 \cdot 2\right)}^{\left(\frac{1}{2} \cdot \frac{1}{2}\right)}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    11. metadata-evalN/A

      \[\leadsto {\color{blue}{4}}^{\left(\frac{1}{2} \cdot \frac{1}{2}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    12. metadata-evalN/A

      \[\leadsto {4}^{\color{blue}{\frac{1}{4}}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    13. metadata-evalN/A

      \[\leadsto {4}^{\color{blue}{\left(2 \cdot \frac{1}{8}\right)}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    14. pow-sqrN/A

      \[\leadsto \color{blue}{\left({4}^{\frac{1}{8}} \cdot {4}^{\frac{1}{8}}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    15. pow-prod-downN/A

      \[\leadsto \color{blue}{{\left(4 \cdot 4\right)}^{\frac{1}{8}}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    16. metadata-evalN/A

      \[\leadsto {\left(4 \cdot 4\right)}^{\color{blue}{\left(2 \cdot \frac{1}{16}\right)}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    17. metadata-evalN/A

      \[\leadsto {\left(4 \cdot 4\right)}^{\left(2 \cdot \color{blue}{\left(\frac{1}{32} \cdot 2\right)}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    18. pow-sqrN/A

      \[\leadsto \color{blue}{\left({\left(4 \cdot 4\right)}^{\left(\frac{1}{32} \cdot 2\right)} \cdot {\left(4 \cdot 4\right)}^{\left(\frac{1}{32} \cdot 2\right)}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    19. pow-prod-downN/A

      \[\leadsto \color{blue}{{\left(\left(4 \cdot 4\right) \cdot \left(4 \cdot 4\right)\right)}^{\left(\frac{1}{32} \cdot 2\right)}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    20. metadata-evalN/A

      \[\leadsto {\left(\color{blue}{16} \cdot \left(4 \cdot 4\right)\right)}^{\left(\frac{1}{32} \cdot 2\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    21. metadata-evalN/A

      \[\leadsto {\left(16 \cdot \color{blue}{16}\right)}^{\left(\frac{1}{32} \cdot 2\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    22. metadata-evalN/A

      \[\leadsto {\color{blue}{256}}^{\left(\frac{1}{32} \cdot 2\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    23. pow-powN/A

      \[\leadsto \color{blue}{{\left({256}^{\frac{1}{32}}\right)}^{2}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    24. lift-pow.f64N/A

      \[\leadsto {\color{blue}{\left({256}^{\frac{1}{32}}\right)}}^{2} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    25. unpow2N/A

      \[\leadsto \color{blue}{\left({256}^{\frac{1}{32}} \cdot {256}^{\frac{1}{32}}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    26. lift-pow.f64N/A

      \[\leadsto \left({256}^{\frac{1}{32}} \cdot \color{blue}{{256}^{\frac{1}{32}}}\right) \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    27. sqr-powN/A

      \[\leadsto \left({256}^{\frac{1}{32}} \cdot \color{blue}{\left({256}^{\left(\frac{\frac{1}{32}}{2}\right)} \cdot {256}^{\left(\frac{\frac{1}{32}}{2}\right)}\right)}\right) \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    28. associate-*r*N/A

      \[\leadsto \color{blue}{\left(\left({256}^{\frac{1}{32}} \cdot {256}^{\left(\frac{\frac{1}{32}}{2}\right)}\right) \cdot {256}^{\left(\frac{\frac{1}{32}}{2}\right)}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
  8. Applied rewrites56.8%

    \[\leadsto \color{blue}{{16777216}^{0.015625} \cdot \left({65536}^{0.0078125} \cdot x\right)} \]
  9. Add Preprocessing

Alternative 2: 99.5% accurate, 0.7× speedup?

\[\begin{array}{l} x_m = \left|x\right| \\ \sqrt{x\_m \cdot 2} \cdot \sqrt{x\_m} \end{array} \]
x_m = (fabs.f64 x)
(FPCore (x_m) :precision binary64 (* (sqrt (* x_m 2.0)) (sqrt x_m)))
x_m = fabs(x);
double code(double x_m) {
	return sqrt((x_m * 2.0)) * sqrt(x_m);
}
x_m = abs(x)
real(8) function code(x_m)
    real(8), intent (in) :: x_m
    code = sqrt((x_m * 2.0d0)) * sqrt(x_m)
end function
x_m = Math.abs(x);
public static double code(double x_m) {
	return Math.sqrt((x_m * 2.0)) * Math.sqrt(x_m);
}
x_m = math.fabs(x)
def code(x_m):
	return math.sqrt((x_m * 2.0)) * math.sqrt(x_m)
x_m = abs(x)
function code(x_m)
	return Float64(sqrt(Float64(x_m * 2.0)) * sqrt(x_m))
end
x_m = abs(x);
function tmp = code(x_m)
	tmp = sqrt((x_m * 2.0)) * sqrt(x_m);
end
x_m = N[Abs[x], $MachinePrecision]
code[x$95$m_] := N[(N[Sqrt[N[(x$95$m * 2.0), $MachinePrecision]], $MachinePrecision] * N[Sqrt[x$95$m], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
x_m = \left|x\right|

\\
\sqrt{x\_m \cdot 2} \cdot \sqrt{x\_m}
\end{array}
Derivation
  1. Initial program 55.7%

    \[\sqrt{\left(2 \cdot x\right) \cdot x} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-sqrt.f64N/A

      \[\leadsto \color{blue}{\sqrt{\left(2 \cdot x\right) \cdot x}} \]
    2. pow1/2N/A

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

      \[\leadsto {\color{blue}{\left(\left(2 \cdot x\right) \cdot x\right)}}^{\frac{1}{2}} \]
    4. unpow-prod-downN/A

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

      \[\leadsto \color{blue}{{\left(2 \cdot x\right)}^{\frac{1}{2}} \cdot {x}^{\frac{1}{2}}} \]
    6. pow1/2N/A

      \[\leadsto \color{blue}{\sqrt{2 \cdot x}} \cdot {x}^{\frac{1}{2}} \]
    7. lower-sqrt.f64N/A

      \[\leadsto \color{blue}{\sqrt{2 \cdot x}} \cdot {x}^{\frac{1}{2}} \]
    8. lift-*.f64N/A

      \[\leadsto \sqrt{\color{blue}{2 \cdot x}} \cdot {x}^{\frac{1}{2}} \]
    9. *-commutativeN/A

      \[\leadsto \sqrt{\color{blue}{x \cdot 2}} \cdot {x}^{\frac{1}{2}} \]
    10. lower-*.f64N/A

      \[\leadsto \sqrt{\color{blue}{x \cdot 2}} \cdot {x}^{\frac{1}{2}} \]
    11. pow1/2N/A

      \[\leadsto \sqrt{x \cdot 2} \cdot \color{blue}{\sqrt{x}} \]
    12. lower-sqrt.f6455.5

      \[\leadsto \sqrt{x \cdot 2} \cdot \color{blue}{\sqrt{x}} \]
  4. Applied rewrites55.5%

    \[\leadsto \color{blue}{\sqrt{x \cdot 2} \cdot \sqrt{x}} \]
  5. Add Preprocessing

Alternative 3: 99.3% accurate, 1.3× speedup?

\[\begin{array}{l} x_m = \left|x\right| \\ \sqrt{2} \cdot x\_m \end{array} \]
x_m = (fabs.f64 x)
(FPCore (x_m) :precision binary64 (* (sqrt 2.0) x_m))
x_m = fabs(x);
double code(double x_m) {
	return sqrt(2.0) * x_m;
}
x_m = abs(x)
real(8) function code(x_m)
    real(8), intent (in) :: x_m
    code = sqrt(2.0d0) * x_m
end function
x_m = Math.abs(x);
public static double code(double x_m) {
	return Math.sqrt(2.0) * x_m;
}
x_m = math.fabs(x)
def code(x_m):
	return math.sqrt(2.0) * x_m
x_m = abs(x)
function code(x_m)
	return Float64(sqrt(2.0) * x_m)
end
x_m = abs(x);
function tmp = code(x_m)
	tmp = sqrt(2.0) * x_m;
end
x_m = N[Abs[x], $MachinePrecision]
code[x$95$m_] := N[(N[Sqrt[2.0], $MachinePrecision] * x$95$m), $MachinePrecision]
\begin{array}{l}
x_m = \left|x\right|

\\
\sqrt{2} \cdot x\_m
\end{array}
Derivation
  1. Initial program 55.7%

    \[\sqrt{\left(2 \cdot x\right) \cdot x} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-sqrt.f64N/A

      \[\leadsto \color{blue}{\sqrt{\left(2 \cdot x\right) \cdot x}} \]
    2. pow1/2N/A

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

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

      \[\leadsto {\left(\color{blue}{\left(2 \cdot x\right)} \cdot x\right)}^{\frac{1}{2}} \]
    5. associate-*l*N/A

      \[\leadsto {\color{blue}{\left(2 \cdot \left(x \cdot x\right)\right)}}^{\frac{1}{2}} \]
    6. unpow-prod-downN/A

      \[\leadsto \color{blue}{{2}^{\frac{1}{2}} \cdot {\left(x \cdot x\right)}^{\frac{1}{2}}} \]
    7. pow1/2N/A

      \[\leadsto {2}^{\frac{1}{2}} \cdot \color{blue}{\sqrt{x \cdot x}} \]
    8. sqrt-prodN/A

      \[\leadsto {2}^{\frac{1}{2}} \cdot \color{blue}{\left(\sqrt{x} \cdot \sqrt{x}\right)} \]
    9. rem-square-sqrtN/A

      \[\leadsto {2}^{\frac{1}{2}} \cdot \color{blue}{x} \]
    10. lower-*.f64N/A

      \[\leadsto \color{blue}{{2}^{\frac{1}{2}} \cdot x} \]
    11. pow1/2N/A

      \[\leadsto \color{blue}{\sqrt{2}} \cdot x \]
    12. lower-sqrt.f6456.6

      \[\leadsto \color{blue}{\sqrt{2}} \cdot x \]
  4. Applied rewrites56.6%

    \[\leadsto \color{blue}{\sqrt{2} \cdot x} \]
  5. Add Preprocessing

Alternative 4: 20.3% accurate, 21.0× speedup?

\[\begin{array}{l} x_m = \left|x\right| \\ x\_m \end{array} \]
x_m = (fabs.f64 x)
(FPCore (x_m) :precision binary64 x_m)
x_m = fabs(x);
double code(double x_m) {
	return x_m;
}
x_m = abs(x)
real(8) function code(x_m)
    real(8), intent (in) :: x_m
    code = x_m
end function
x_m = Math.abs(x);
public static double code(double x_m) {
	return x_m;
}
x_m = math.fabs(x)
def code(x_m):
	return x_m
x_m = abs(x)
function code(x_m)
	return x_m
end
x_m = abs(x);
function tmp = code(x_m)
	tmp = x_m;
end
x_m = N[Abs[x], $MachinePrecision]
code[x$95$m_] := x$95$m
\begin{array}{l}
x_m = \left|x\right|

\\
x\_m
\end{array}
Derivation
  1. Initial program 55.7%

    \[\sqrt{\left(2 \cdot x\right) \cdot x} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-sqrt.f64N/A

      \[\leadsto \color{blue}{\sqrt{\left(2 \cdot x\right) \cdot x}} \]
    2. pow1/2N/A

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

      \[\leadsto {\color{blue}{\left(\left(2 \cdot x\right) \cdot x\right)}}^{\frac{1}{2}} \]
    4. unpow-prod-downN/A

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

      \[\leadsto \color{blue}{{\left(2 \cdot x\right)}^{\frac{1}{2}} \cdot {x}^{\frac{1}{2}}} \]
    6. pow1/2N/A

      \[\leadsto \color{blue}{\sqrt{2 \cdot x}} \cdot {x}^{\frac{1}{2}} \]
    7. lower-sqrt.f64N/A

      \[\leadsto \color{blue}{\sqrt{2 \cdot x}} \cdot {x}^{\frac{1}{2}} \]
    8. lift-*.f64N/A

      \[\leadsto \sqrt{\color{blue}{2 \cdot x}} \cdot {x}^{\frac{1}{2}} \]
    9. *-commutativeN/A

      \[\leadsto \sqrt{\color{blue}{x \cdot 2}} \cdot {x}^{\frac{1}{2}} \]
    10. lower-*.f64N/A

      \[\leadsto \sqrt{\color{blue}{x \cdot 2}} \cdot {x}^{\frac{1}{2}} \]
    11. pow1/2N/A

      \[\leadsto \sqrt{x \cdot 2} \cdot \color{blue}{\sqrt{x}} \]
    12. lower-sqrt.f6455.5

      \[\leadsto \sqrt{x \cdot 2} \cdot \color{blue}{\sqrt{x}} \]
  4. Applied rewrites55.5%

    \[\leadsto \color{blue}{\sqrt{x \cdot 2} \cdot \sqrt{x}} \]
  5. Step-by-step derivation
    1. lift-sqrt.f64N/A

      \[\leadsto \color{blue}{\sqrt{x \cdot 2}} \cdot \sqrt{x} \]
    2. lift-*.f64N/A

      \[\leadsto \sqrt{\color{blue}{x \cdot 2}} \cdot \sqrt{x} \]
    3. sqrt-prodN/A

      \[\leadsto \color{blue}{\left(\sqrt{x} \cdot \sqrt{2}\right)} \cdot \sqrt{x} \]
    4. lift-sqrt.f64N/A

      \[\leadsto \left(\color{blue}{\sqrt{x}} \cdot \sqrt{2}\right) \cdot \sqrt{x} \]
    5. pow1/2N/A

      \[\leadsto \left(\sqrt{x} \cdot \color{blue}{{2}^{\frac{1}{2}}}\right) \cdot \sqrt{x} \]
    6. metadata-evalN/A

      \[\leadsto \left(\sqrt{x} \cdot {2}^{\color{blue}{\left(\frac{1}{4} + \frac{1}{4}\right)}}\right) \cdot \sqrt{x} \]
    7. pow-prod-upN/A

      \[\leadsto \left(\sqrt{x} \cdot \color{blue}{\left({2}^{\frac{1}{4}} \cdot {2}^{\frac{1}{4}}\right)}\right) \cdot \sqrt{x} \]
    8. pow-prod-downN/A

      \[\leadsto \left(\sqrt{x} \cdot \color{blue}{{\left(2 \cdot 2\right)}^{\frac{1}{4}}}\right) \cdot \sqrt{x} \]
    9. metadata-evalN/A

      \[\leadsto \left(\sqrt{x} \cdot {\color{blue}{4}}^{\frac{1}{4}}\right) \cdot \sqrt{x} \]
    10. pow-to-expN/A

      \[\leadsto \left(\sqrt{x} \cdot \color{blue}{e^{\log 4 \cdot \frac{1}{4}}}\right) \cdot \sqrt{x} \]
    11. metadata-evalN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\log 4 \cdot \color{blue}{\left(\frac{1}{8} + \frac{1}{8}\right)}}\right) \cdot \sqrt{x} \]
    12. distribute-lft-outN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\color{blue}{\log 4 \cdot \frac{1}{8} + \log 4 \cdot \frac{1}{8}}}\right) \cdot \sqrt{x} \]
    13. flip-+N/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\color{blue}{\frac{\left(\log 4 \cdot \frac{1}{8}\right) \cdot \left(\log 4 \cdot \frac{1}{8}\right) - \left(\log 4 \cdot \frac{1}{8}\right) \cdot \left(\log 4 \cdot \frac{1}{8}\right)}{\log 4 \cdot \frac{1}{8} - \log 4 \cdot \frac{1}{8}}}}\right) \cdot \sqrt{x} \]
    14. +-inversesN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\frac{\color{blue}{0}}{\log 4 \cdot \frac{1}{8} - \log 4 \cdot \frac{1}{8}}}\right) \cdot \sqrt{x} \]
    15. +-inversesN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\frac{\color{blue}{\left(\log x \cdot \frac{3}{8}\right) \cdot \left(\log x \cdot \frac{3}{8}\right) - \left(\log x \cdot \frac{3}{8}\right) \cdot \left(\log x \cdot \frac{3}{8}\right)}}{\log 4 \cdot \frac{1}{8} - \log 4 \cdot \frac{1}{8}}}\right) \cdot \sqrt{x} \]
    16. +-inversesN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\frac{\left(\log x \cdot \frac{3}{8}\right) \cdot \left(\log x \cdot \frac{3}{8}\right) - \left(\log x \cdot \frac{3}{8}\right) \cdot \left(\log x \cdot \frac{3}{8}\right)}{\color{blue}{0}}}\right) \cdot \sqrt{x} \]
    17. +-inversesN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\frac{\left(\log x \cdot \frac{3}{8}\right) \cdot \left(\log x \cdot \frac{3}{8}\right) - \left(\log x \cdot \frac{3}{8}\right) \cdot \left(\log x \cdot \frac{3}{8}\right)}{\color{blue}{\log x \cdot \frac{3}{8} - \log x \cdot \frac{3}{8}}}}\right) \cdot \sqrt{x} \]
    18. flip-+N/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\color{blue}{\log x \cdot \frac{3}{8} + \log x \cdot \frac{3}{8}}}\right) \cdot \sqrt{x} \]
    19. distribute-lft-outN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\color{blue}{\log x \cdot \left(\frac{3}{8} + \frac{3}{8}\right)}}\right) \cdot \sqrt{x} \]
    20. metadata-evalN/A

      \[\leadsto \left(\sqrt{x} \cdot e^{\log x \cdot \color{blue}{\frac{3}{4}}}\right) \cdot \sqrt{x} \]
    21. pow-to-expN/A

      \[\leadsto \left(\sqrt{x} \cdot \color{blue}{{x}^{\frac{3}{4}}}\right) \cdot \sqrt{x} \]
    22. lift-pow.f64N/A

      \[\leadsto \left(\sqrt{x} \cdot \color{blue}{{x}^{\frac{3}{4}}}\right) \cdot \sqrt{x} \]
  6. Applied rewrites55.3%

    \[\leadsto \color{blue}{\left(\sqrt{x} \cdot \sqrt{2}\right)} \cdot \sqrt{x} \]
  7. Step-by-step derivation
    1. lift-*.f64N/A

      \[\leadsto \color{blue}{\left(\sqrt{x} \cdot \sqrt{2}\right) \cdot \sqrt{x}} \]
    2. lift-*.f64N/A

      \[\leadsto \color{blue}{\left(\sqrt{x} \cdot \sqrt{2}\right)} \cdot \sqrt{x} \]
    3. *-commutativeN/A

      \[\leadsto \color{blue}{\left(\sqrt{2} \cdot \sqrt{x}\right)} \cdot \sqrt{x} \]
    4. associate-*l*N/A

      \[\leadsto \color{blue}{\sqrt{2} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right)} \]
    5. lift-sqrt.f64N/A

      \[\leadsto \color{blue}{\sqrt{2}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    6. pow1/2N/A

      \[\leadsto \color{blue}{{2}^{\frac{1}{2}}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    7. metadata-evalN/A

      \[\leadsto {2}^{\color{blue}{\left(2 \cdot \frac{1}{4}\right)}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    8. metadata-evalN/A

      \[\leadsto {2}^{\left(2 \cdot \color{blue}{\left(\frac{1}{2} \cdot \frac{1}{2}\right)}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    9. pow-sqrN/A

      \[\leadsto \color{blue}{\left({2}^{\left(\frac{1}{2} \cdot \frac{1}{2}\right)} \cdot {2}^{\left(\frac{1}{2} \cdot \frac{1}{2}\right)}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    10. pow-prod-downN/A

      \[\leadsto \color{blue}{{\left(2 \cdot 2\right)}^{\left(\frac{1}{2} \cdot \frac{1}{2}\right)}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    11. metadata-evalN/A

      \[\leadsto {\color{blue}{4}}^{\left(\frac{1}{2} \cdot \frac{1}{2}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    12. metadata-evalN/A

      \[\leadsto {4}^{\color{blue}{\frac{1}{4}}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    13. metadata-evalN/A

      \[\leadsto {4}^{\color{blue}{\left(2 \cdot \frac{1}{8}\right)}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    14. pow-sqrN/A

      \[\leadsto \color{blue}{\left({4}^{\frac{1}{8}} \cdot {4}^{\frac{1}{8}}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    15. pow-prod-downN/A

      \[\leadsto \color{blue}{{\left(4 \cdot 4\right)}^{\frac{1}{8}}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    16. metadata-evalN/A

      \[\leadsto {\left(4 \cdot 4\right)}^{\color{blue}{\left(2 \cdot \frac{1}{16}\right)}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    17. metadata-evalN/A

      \[\leadsto {\left(4 \cdot 4\right)}^{\left(2 \cdot \color{blue}{\left(\frac{1}{32} \cdot 2\right)}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    18. pow-sqrN/A

      \[\leadsto \color{blue}{\left({\left(4 \cdot 4\right)}^{\left(\frac{1}{32} \cdot 2\right)} \cdot {\left(4 \cdot 4\right)}^{\left(\frac{1}{32} \cdot 2\right)}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    19. pow-prod-downN/A

      \[\leadsto \color{blue}{{\left(\left(4 \cdot 4\right) \cdot \left(4 \cdot 4\right)\right)}^{\left(\frac{1}{32} \cdot 2\right)}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    20. metadata-evalN/A

      \[\leadsto {\left(\color{blue}{16} \cdot \left(4 \cdot 4\right)\right)}^{\left(\frac{1}{32} \cdot 2\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    21. metadata-evalN/A

      \[\leadsto {\left(16 \cdot \color{blue}{16}\right)}^{\left(\frac{1}{32} \cdot 2\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    22. metadata-evalN/A

      \[\leadsto {\color{blue}{256}}^{\left(\frac{1}{32} \cdot 2\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    23. pow-powN/A

      \[\leadsto \color{blue}{{\left({256}^{\frac{1}{32}}\right)}^{2}} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    24. lift-pow.f64N/A

      \[\leadsto {\color{blue}{\left({256}^{\frac{1}{32}}\right)}}^{2} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    25. unpow2N/A

      \[\leadsto \color{blue}{\left({256}^{\frac{1}{32}} \cdot {256}^{\frac{1}{32}}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    26. lift-pow.f64N/A

      \[\leadsto \left({256}^{\frac{1}{32}} \cdot \color{blue}{{256}^{\frac{1}{32}}}\right) \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    27. sqr-powN/A

      \[\leadsto \left({256}^{\frac{1}{32}} \cdot \color{blue}{\left({256}^{\left(\frac{\frac{1}{32}}{2}\right)} \cdot {256}^{\left(\frac{\frac{1}{32}}{2}\right)}\right)}\right) \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
    28. associate-*r*N/A

      \[\leadsto \color{blue}{\left(\left({256}^{\frac{1}{32}} \cdot {256}^{\left(\frac{\frac{1}{32}}{2}\right)}\right) \cdot {256}^{\left(\frac{\frac{1}{32}}{2}\right)}\right)} \cdot \left(\sqrt{x} \cdot \sqrt{x}\right) \]
  8. Applied rewrites56.8%

    \[\leadsto \color{blue}{{16777216}^{0.015625} \cdot \left({65536}^{0.0078125} \cdot x\right)} \]
  9. Applied rewrites12.5%

    \[\leadsto \color{blue}{x \cdot 1} \]
  10. Final simplification12.5%

    \[\leadsto x \]
  11. Add Preprocessing

Reproduce

?
herbie shell --seed 2024318 
(FPCore (x)
  :name "sqrt B (should all be same)"
  :precision binary64
  (sqrt (* (* 2.0 x) x)))