| Alternative 1 | |
|---|---|
| Error | 0.7 |
| Cost | 46144 |
\[\left|\frac{ew}{\frac{\mathsf{hypot}\left(1, \frac{\tan t}{\frac{ew}{eh}}\right)}{\cos t}} - \sin \tan^{-1} \left(\frac{-t \cdot eh}{ew}\right) \cdot \left(eh \cdot \sin t\right)\right|
\]
(FPCore (eh ew t) :precision binary64 (fabs (- (* (* ew (cos t)) (cos (atan (/ (* (- eh) (tan t)) ew)))) (* (* eh (sin t)) (sin (atan (/ (* (- eh) (tan t)) ew)))))))
(FPCore (eh ew t) :precision binary64 (fabs (- (* ew (/ (cos t) (hypot 1.0 (* eh (/ (tan t) ew))))) (* (sin (atan (/ (* eh (- (tan t))) ew))) (* eh (sin t))))))
double code(double eh, double ew, double t) {
return fabs((((ew * cos(t)) * cos(atan(((-eh * tan(t)) / ew)))) - ((eh * sin(t)) * sin(atan(((-eh * tan(t)) / ew))))));
}
double code(double eh, double ew, double t) {
return fabs(((ew * (cos(t) / hypot(1.0, (eh * (tan(t) / ew))))) - (sin(atan(((eh * -tan(t)) / ew))) * (eh * sin(t)))));
}
public static double code(double eh, double ew, double t) {
return Math.abs((((ew * Math.cos(t)) * Math.cos(Math.atan(((-eh * Math.tan(t)) / ew)))) - ((eh * Math.sin(t)) * Math.sin(Math.atan(((-eh * Math.tan(t)) / ew))))));
}
public static double code(double eh, double ew, double t) {
return Math.abs(((ew * (Math.cos(t) / Math.hypot(1.0, (eh * (Math.tan(t) / ew))))) - (Math.sin(Math.atan(((eh * -Math.tan(t)) / ew))) * (eh * Math.sin(t)))));
}
def code(eh, ew, t): return math.fabs((((ew * math.cos(t)) * math.cos(math.atan(((-eh * math.tan(t)) / ew)))) - ((eh * math.sin(t)) * math.sin(math.atan(((-eh * math.tan(t)) / ew))))))
def code(eh, ew, t): return math.fabs(((ew * (math.cos(t) / math.hypot(1.0, (eh * (math.tan(t) / ew))))) - (math.sin(math.atan(((eh * -math.tan(t)) / ew))) * (eh * math.sin(t)))))
function code(eh, ew, t) return abs(Float64(Float64(Float64(ew * cos(t)) * cos(atan(Float64(Float64(Float64(-eh) * tan(t)) / ew)))) - Float64(Float64(eh * sin(t)) * sin(atan(Float64(Float64(Float64(-eh) * tan(t)) / ew)))))) end
function code(eh, ew, t) return abs(Float64(Float64(ew * Float64(cos(t) / hypot(1.0, Float64(eh * Float64(tan(t) / ew))))) - Float64(sin(atan(Float64(Float64(eh * Float64(-tan(t))) / ew))) * Float64(eh * sin(t))))) end
function tmp = code(eh, ew, t) tmp = abs((((ew * cos(t)) * cos(atan(((-eh * tan(t)) / ew)))) - ((eh * sin(t)) * sin(atan(((-eh * tan(t)) / ew)))))); end
function tmp = code(eh, ew, t) tmp = abs(((ew * (cos(t) / hypot(1.0, (eh * (tan(t) / ew))))) - (sin(atan(((eh * -tan(t)) / ew))) * (eh * sin(t))))); end
code[eh_, ew_, t_] := N[Abs[N[(N[(N[(ew * N[Cos[t], $MachinePrecision]), $MachinePrecision] * N[Cos[N[ArcTan[N[(N[((-eh) * N[Tan[t], $MachinePrecision]), $MachinePrecision] / ew), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision] - N[(N[(eh * N[Sin[t], $MachinePrecision]), $MachinePrecision] * N[Sin[N[ArcTan[N[(N[((-eh) * N[Tan[t], $MachinePrecision]), $MachinePrecision] / ew), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
code[eh_, ew_, t_] := N[Abs[N[(N[(ew * N[(N[Cos[t], $MachinePrecision] / N[Sqrt[1.0 ^ 2 + N[(eh * N[(N[Tan[t], $MachinePrecision] / ew), $MachinePrecision]), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(N[Sin[N[ArcTan[N[(N[(eh * (-N[Tan[t], $MachinePrecision])), $MachinePrecision] / ew), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] * N[(eh * N[Sin[t], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\left|\left(ew \cdot \cos t\right) \cdot \cos \tan^{-1} \left(\frac{\left(-eh\right) \cdot \tan t}{ew}\right) - \left(eh \cdot \sin t\right) \cdot \sin \tan^{-1} \left(\frac{\left(-eh\right) \cdot \tan t}{ew}\right)\right|
\left|ew \cdot \frac{\cos t}{\mathsf{hypot}\left(1, eh \cdot \frac{\tan t}{ew}\right)} - \sin \tan^{-1} \left(\frac{eh \cdot \left(-\tan t\right)}{ew}\right) \cdot \left(eh \cdot \sin t\right)\right|
Results
Initial program 0.1
Applied egg-rr26.4
Simplified0.1
[Start]26.4 | \[ \left|\left(e^{\mathsf{log1p}\left(ew \cdot \frac{\cos t}{\mathsf{hypot}\left(1, eh \cdot \frac{\tan t}{ew}\right)}\right)} - 1\right) - \left(eh \cdot \sin t\right) \cdot \sin \tan^{-1} \left(\frac{\left(-eh\right) \cdot \tan t}{ew}\right)\right|
\] |
|---|---|
expm1-def [=>]15.4 | \[ \left|\color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(ew \cdot \frac{\cos t}{\mathsf{hypot}\left(1, eh \cdot \frac{\tan t}{ew}\right)}\right)\right)} - \left(eh \cdot \sin t\right) \cdot \sin \tan^{-1} \left(\frac{\left(-eh\right) \cdot \tan t}{ew}\right)\right|
\] |
expm1-log1p [=>]0.1 | \[ \left|\color{blue}{ew \cdot \frac{\cos t}{\mathsf{hypot}\left(1, eh \cdot \frac{\tan t}{ew}\right)}} - \left(eh \cdot \sin t\right) \cdot \sin \tan^{-1} \left(\frac{\left(-eh\right) \cdot \tan t}{ew}\right)\right|
\] |
Final simplification0.1
| Alternative 1 | |
|---|---|
| Error | 0.7 |
| Cost | 46144 |
| Alternative 2 | |
|---|---|
| Error | 1.0 |
| Cost | 46080 |
| Alternative 3 | |
|---|---|
| Error | 1.1 |
| Cost | 39296 |
| Alternative 4 | |
|---|---|
| Error | 1.1 |
| Cost | 39232 |
| Alternative 5 | |
|---|---|
| Error | 1.2 |
| Cost | 32896 |
| Alternative 6 | |
|---|---|
| Error | 13.3 |
| Cost | 32768 |
| Alternative 7 | |
|---|---|
| Error | 13.3 |
| Cost | 26368 |
| Alternative 8 | |
|---|---|
| Error | 13.4 |
| Cost | 13120 |
| Alternative 9 | |
|---|---|
| Error | 43.2 |
| Cost | 7104 |
| Alternative 10 | |
|---|---|
| Error | 43.2 |
| Cost | 7104 |
herbie shell --seed 2023057
(FPCore (eh ew t)
:name "Example 2 from Robby"
:precision binary64
(fabs (- (* (* ew (cos t)) (cos (atan (/ (* (- eh) (tan t)) ew)))) (* (* eh (sin t)) (sin (atan (/ (* (- eh) (tan t)) ew)))))))