| Alternative 1 | |
|---|---|
| Accuracy | 99.8% |
| Cost | 52480 |
\[\left|\frac{ew \cdot \sin t}{\mathsf{hypot}\left(1, \frac{eh}{ew \cdot \tan t}\right)} + \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right) \cdot \left(eh \cdot \cos t\right)\right|
\]

(FPCore (eh ew t) :precision binary64 (fabs (+ (* (* ew (sin t)) (cos (atan (/ (/ eh ew) (tan t))))) (* (* eh (cos t)) (sin (atan (/ (/ eh ew) (tan t))))))))
(FPCore (eh ew t) :precision binary64 (fabs (+ (/ (* ew (sin t)) (hypot 1.0 (/ eh (* ew (tan t))))) (* (sin (atan (/ (/ eh ew) (tan t)))) (* eh (cos t))))))
double code(double eh, double ew, double t) {
return fabs((((ew * sin(t)) * cos(atan(((eh / ew) / tan(t))))) + ((eh * cos(t)) * sin(atan(((eh / ew) / tan(t)))))));
}
double code(double eh, double ew, double t) {
return fabs((((ew * sin(t)) / hypot(1.0, (eh / (ew * tan(t))))) + (sin(atan(((eh / ew) / tan(t)))) * (eh * cos(t)))));
}
public static double code(double eh, double ew, double t) {
return Math.abs((((ew * Math.sin(t)) * Math.cos(Math.atan(((eh / ew) / Math.tan(t))))) + ((eh * Math.cos(t)) * Math.sin(Math.atan(((eh / ew) / Math.tan(t)))))));
}
public static double code(double eh, double ew, double t) {
return Math.abs((((ew * Math.sin(t)) / Math.hypot(1.0, (eh / (ew * Math.tan(t))))) + (Math.sin(Math.atan(((eh / ew) / Math.tan(t)))) * (eh * Math.cos(t)))));
}
def code(eh, ew, t): return math.fabs((((ew * math.sin(t)) * math.cos(math.atan(((eh / ew) / math.tan(t))))) + ((eh * math.cos(t)) * math.sin(math.atan(((eh / ew) / math.tan(t)))))))
def code(eh, ew, t): return math.fabs((((ew * math.sin(t)) / math.hypot(1.0, (eh / (ew * math.tan(t))))) + (math.sin(math.atan(((eh / ew) / math.tan(t)))) * (eh * math.cos(t)))))
function code(eh, ew, t) return abs(Float64(Float64(Float64(ew * sin(t)) * cos(atan(Float64(Float64(eh / ew) / tan(t))))) + Float64(Float64(eh * cos(t)) * sin(atan(Float64(Float64(eh / ew) / tan(t))))))) end
function code(eh, ew, t) return abs(Float64(Float64(Float64(ew * sin(t)) / hypot(1.0, Float64(eh / Float64(ew * tan(t))))) + Float64(sin(atan(Float64(Float64(eh / ew) / tan(t)))) * Float64(eh * cos(t))))) end
function tmp = code(eh, ew, t) tmp = abs((((ew * sin(t)) * cos(atan(((eh / ew) / tan(t))))) + ((eh * cos(t)) * sin(atan(((eh / ew) / tan(t))))))); end
function tmp = code(eh, ew, t) tmp = abs((((ew * sin(t)) / hypot(1.0, (eh / (ew * tan(t))))) + (sin(atan(((eh / ew) / tan(t)))) * (eh * cos(t))))); end
code[eh_, ew_, t_] := N[Abs[N[(N[(N[(ew * N[Sin[t], $MachinePrecision]), $MachinePrecision] * N[Cos[N[ArcTan[N[(N[(eh / ew), $MachinePrecision] / N[Tan[t], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision] + N[(N[(eh * N[Cos[t], $MachinePrecision]), $MachinePrecision] * N[Sin[N[ArcTan[N[(N[(eh / ew), $MachinePrecision] / N[Tan[t], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
code[eh_, ew_, t_] := N[Abs[N[(N[(N[(ew * N[Sin[t], $MachinePrecision]), $MachinePrecision] / N[Sqrt[1.0 ^ 2 + N[(eh / N[(ew * N[Tan[t], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision] + N[(N[Sin[N[ArcTan[N[(N[(eh / ew), $MachinePrecision] / N[Tan[t], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] * N[(eh * N[Cos[t], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\left|\left(ew \cdot \sin t\right) \cdot \cos \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right) + \left(eh \cdot \cos t\right) \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\left|\frac{ew \cdot \sin t}{\mathsf{hypot}\left(1, \frac{eh}{ew \cdot \tan t}\right)} + \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right) \cdot \left(eh \cdot \cos t\right)\right|
Herbie found 7 alternatives:
| Alternative | Accuracy | Speedup |
|---|
Results
Initial program 99.8%
Applied egg-rr98.8%
[Start]99.8% | \[ \left|\left(ew \cdot \sin t\right) \cdot \cos \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right) + \left(eh \cdot \cos t\right) \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\] |
|---|---|
add-cube-cbrt [=>]98.8% | \[ \left|\left(ew \cdot \sin t\right) \cdot \cos \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right) + \color{blue}{\left(\left(\sqrt[3]{eh \cdot \cos t} \cdot \sqrt[3]{eh \cdot \cos t}\right) \cdot \sqrt[3]{eh \cdot \cos t}\right)} \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\] |
pow3 [=>]98.8% | \[ \left|\left(ew \cdot \sin t\right) \cdot \cos \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right) + \color{blue}{{\left(\sqrt[3]{eh \cdot \cos t}\right)}^{3}} \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\] |
Applied egg-rr98.8%
[Start]98.8% | \[ \left|\left(ew \cdot \sin t\right) \cdot \cos \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right) + {\left(\sqrt[3]{eh \cdot \cos t}\right)}^{3} \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\] |
|---|---|
cos-atan [=>]98.8% | \[ \left|\left(ew \cdot \sin t\right) \cdot \color{blue}{\frac{1}{\sqrt{1 + \frac{\frac{eh}{ew}}{\tan t} \cdot \frac{\frac{eh}{ew}}{\tan t}}}} + {\left(\sqrt[3]{eh \cdot \cos t}\right)}^{3} \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\] |
hypot-1-def [=>]98.8% | \[ \left|\left(ew \cdot \sin t\right) \cdot \frac{1}{\color{blue}{\mathsf{hypot}\left(1, \frac{\frac{eh}{ew}}{\tan t}\right)}} + {\left(\sqrt[3]{eh \cdot \cos t}\right)}^{3} \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\] |
associate-/l/ [=>]98.8% | \[ \left|\left(ew \cdot \sin t\right) \cdot \frac{1}{\mathsf{hypot}\left(1, \color{blue}{\frac{eh}{\tan t \cdot ew}}\right)} + {\left(\sqrt[3]{eh \cdot \cos t}\right)}^{3} \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\] |
un-div-inv [=>]98.8% | \[ \left|\color{blue}{\frac{ew \cdot \sin t}{\mathsf{hypot}\left(1, \frac{eh}{\tan t \cdot ew}\right)}} + {\left(\sqrt[3]{eh \cdot \cos t}\right)}^{3} \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\] |
Taylor expanded in t around inf 99.8%
Simplified99.8%
[Start]99.8% | \[ \left|\frac{ew \cdot \sin t}{\mathsf{hypot}\left(1, \frac{eh}{\tan t \cdot ew}\right)} + \left({1}^{0.3333333333333333} \cdot \left(\cos t \cdot eh\right)\right) \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\] |
|---|---|
pow-base-1 [=>]99.8% | \[ \left|\frac{ew \cdot \sin t}{\mathsf{hypot}\left(1, \frac{eh}{\tan t \cdot ew}\right)} + \left(\color{blue}{1} \cdot \left(\cos t \cdot eh\right)\right) \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\] |
associate-*r* [=>]99.8% | \[ \left|\frac{ew \cdot \sin t}{\mathsf{hypot}\left(1, \frac{eh}{\tan t \cdot ew}\right)} + \color{blue}{\left(\left(1 \cdot \cos t\right) \cdot eh\right)} \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\] |
*-lft-identity [=>]99.8% | \[ \left|\frac{ew \cdot \sin t}{\mathsf{hypot}\left(1, \frac{eh}{\tan t \cdot ew}\right)} + \left(\color{blue}{\cos t} \cdot eh\right) \cdot \sin \tan^{-1} \left(\frac{\frac{eh}{ew}}{\tan t}\right)\right|
\] |
Final simplification99.8%
| Alternative 1 | |
|---|---|
| Accuracy | 99.8% |
| Cost | 52480 |
| Alternative 2 | |
|---|---|
| Accuracy | 99.0% |
| Cost | 52416 |
| Alternative 3 | |
|---|---|
| Accuracy | 98.4% |
| Cost | 39232 |
| Alternative 4 | |
|---|---|
| Accuracy | 96.6% |
| Cost | 33609 |
| Alternative 5 | |
|---|---|
| Accuracy | 89.2% |
| Cost | 32832 |
| Alternative 6 | |
|---|---|
| Accuracy | 79.0% |
| Cost | 32704 |
| Alternative 7 | |
|---|---|
| Accuracy | 77.7% |
| Cost | 26304 |
herbie shell --seed 2023263
(FPCore (eh ew t)
:name "Example from Robby"
:precision binary64
(fabs (+ (* (* ew (sin t)) (cos (atan (/ (/ eh ew) (tan t))))) (* (* eh (cos t)) (sin (atan (/ (/ eh ew) (tan t))))))))