| Alternative 1 | |
|---|---|
| Accuracy | 100.0% |
| Cost | 6528 |
\[{d1}^{10}
\]

(FPCore (d1) :precision binary64 (* (* d1 (* (* (* (* (* d1 (* d1 d1)) d1) d1) (* d1 d1)) d1)) d1))
(FPCore (d1) :precision binary64 (pow d1 10.0))
double code(double d1) {
return (d1 * (((((d1 * (d1 * d1)) * d1) * d1) * (d1 * d1)) * d1)) * d1;
}
double code(double d1) {
return pow(d1, 10.0);
}
real(8) function code(d1)
real(8), intent (in) :: d1
code = (d1 * (((((d1 * (d1 * d1)) * d1) * d1) * (d1 * d1)) * d1)) * d1
end function
real(8) function code(d1)
real(8), intent (in) :: d1
code = d1 ** 10.0d0
end function
public static double code(double d1) {
return (d1 * (((((d1 * (d1 * d1)) * d1) * d1) * (d1 * d1)) * d1)) * d1;
}
public static double code(double d1) {
return Math.pow(d1, 10.0);
}
def code(d1): return (d1 * (((((d1 * (d1 * d1)) * d1) * d1) * (d1 * d1)) * d1)) * d1
def code(d1): return math.pow(d1, 10.0)
function code(d1) return Float64(Float64(d1 * Float64(Float64(Float64(Float64(Float64(d1 * Float64(d1 * d1)) * d1) * d1) * Float64(d1 * d1)) * d1)) * d1) end
function code(d1) return d1 ^ 10.0 end
function tmp = code(d1) tmp = (d1 * (((((d1 * (d1 * d1)) * d1) * d1) * (d1 * d1)) * d1)) * d1; end
function tmp = code(d1) tmp = d1 ^ 10.0; end
code[d1_] := N[(N[(d1 * N[(N[(N[(N[(N[(d1 * N[(d1 * d1), $MachinePrecision]), $MachinePrecision] * d1), $MachinePrecision] * d1), $MachinePrecision] * N[(d1 * d1), $MachinePrecision]), $MachinePrecision] * d1), $MachinePrecision]), $MachinePrecision] * d1), $MachinePrecision]
code[d1_] := N[Power[d1, 10.0], $MachinePrecision]
\left(d1 \cdot \left(\left(\left(\left(\left(d1 \cdot \left(d1 \cdot d1\right)\right) \cdot d1\right) \cdot d1\right) \cdot \left(d1 \cdot d1\right)\right) \cdot d1\right)\right) \cdot d1
{d1}^{10}
Herbie found 2 alternatives:
| Alternative | Accuracy | Speedup |
|---|
Results
| Original | 99.9% |
|---|---|
| Target | 100.0% |
| Herbie | 100.0% |
Initial program 99.9%
Simplified100.0%
[Start]99.9% | \[ \left(d1 \cdot \left(\left(\left(\left(\left(d1 \cdot \left(d1 \cdot d1\right)\right) \cdot d1\right) \cdot d1\right) \cdot \left(d1 \cdot d1\right)\right) \cdot d1\right)\right) \cdot d1
\] |
|---|---|
*-commutative [=>]99.9% | \[ \color{blue}{\left(\left(\left(\left(\left(\left(d1 \cdot \left(d1 \cdot d1\right)\right) \cdot d1\right) \cdot d1\right) \cdot \left(d1 \cdot d1\right)\right) \cdot d1\right) \cdot d1\right)} \cdot d1
\] |
associate-*l* [=>]99.9% | \[ \color{blue}{\left(\left(\left(\left(\left(d1 \cdot \left(d1 \cdot d1\right)\right) \cdot d1\right) \cdot d1\right) \cdot \left(d1 \cdot d1\right)\right) \cdot d1\right) \cdot \left(d1 \cdot d1\right)}
\] |
associate-*l* [=>]99.9% | \[ \color{blue}{\left(\left(\left(\left(d1 \cdot \left(d1 \cdot d1\right)\right) \cdot d1\right) \cdot d1\right) \cdot \left(\left(d1 \cdot d1\right) \cdot d1\right)\right)} \cdot \left(d1 \cdot d1\right)
\] |
associate-*r* [<=]99.9% | \[ \left(\left(\left(\left(d1 \cdot \left(d1 \cdot d1\right)\right) \cdot d1\right) \cdot d1\right) \cdot \color{blue}{\left(d1 \cdot \left(d1 \cdot d1\right)\right)}\right) \cdot \left(d1 \cdot d1\right)
\] |
associate-*l* [=>]99.9% | \[ \color{blue}{\left(\left(\left(d1 \cdot \left(d1 \cdot d1\right)\right) \cdot d1\right) \cdot d1\right) \cdot \left(\left(d1 \cdot \left(d1 \cdot d1\right)\right) \cdot \left(d1 \cdot d1\right)\right)}
\] |
cube-unmult [=>]99.9% | \[ \left(\left(\color{blue}{{d1}^{3}} \cdot d1\right) \cdot d1\right) \cdot \left(\left(d1 \cdot \left(d1 \cdot d1\right)\right) \cdot \left(d1 \cdot d1\right)\right)
\] |
pow-plus [=>]99.9% | \[ \left(\color{blue}{{d1}^{\left(3 + 1\right)}} \cdot d1\right) \cdot \left(\left(d1 \cdot \left(d1 \cdot d1\right)\right) \cdot \left(d1 \cdot d1\right)\right)
\] |
pow-plus [=>]99.9% | \[ \color{blue}{{d1}^{\left(\left(3 + 1\right) + 1\right)}} \cdot \left(\left(d1 \cdot \left(d1 \cdot d1\right)\right) \cdot \left(d1 \cdot d1\right)\right)
\] |
associate-*l* [<=]99.9% | \[ {d1}^{\left(\left(3 + 1\right) + 1\right)} \cdot \color{blue}{\left(\left(\left(d1 \cdot \left(d1 \cdot d1\right)\right) \cdot d1\right) \cdot d1\right)}
\] |
cube-unmult [=>]99.9% | \[ {d1}^{\left(\left(3 + 1\right) + 1\right)} \cdot \left(\left(\color{blue}{{d1}^{3}} \cdot d1\right) \cdot d1\right)
\] |
pow-plus [=>]99.9% | \[ {d1}^{\left(\left(3 + 1\right) + 1\right)} \cdot \left(\color{blue}{{d1}^{\left(3 + 1\right)}} \cdot d1\right)
\] |
pow-plus [=>]99.9% | \[ {d1}^{\left(\left(3 + 1\right) + 1\right)} \cdot \color{blue}{{d1}^{\left(\left(3 + 1\right) + 1\right)}}
\] |
pow-sqr [=>]100.0% | \[ \color{blue}{{d1}^{\left(2 \cdot \left(\left(3 + 1\right) + 1\right)\right)}}
\] |
metadata-eval [=>]100.0% | \[ {d1}^{\left(2 \cdot \left(\color{blue}{4} + 1\right)\right)}
\] |
metadata-eval [=>]100.0% | \[ {d1}^{\left(2 \cdot \color{blue}{5}\right)}
\] |
metadata-eval [=>]100.0% | \[ {d1}^{\color{blue}{10}}
\] |
Final simplification100.0%
| Alternative 1 | |
|---|---|
| Accuracy | 100.0% |
| Cost | 6528 |
| Alternative 2 | |
|---|---|
| Accuracy | 99.9% |
| Cost | 1216 |
herbie shell --seed 2023178
(FPCore (d1)
:name "FastMath test5"
:precision binary64
:herbie-target
(pow d1 10.0)
(* (* d1 (* (* (* (* (* d1 (* d1 d1)) d1) d1) (* d1 d1)) d1)) d1))