| Alternative 1 | |
|---|---|
| Error | 0.2 |
| Cost | 32832 |
\[x + \left(\frac{\tan y + \tan z}{1 - \tan y \cdot \tan z} - \tan a\right)
\]
(FPCore (x y z a) :precision binary64 (+ x (- (tan (+ y z)) (tan a))))
(FPCore (x y z a) :precision binary64 (+ x (- (* (+ (tan y) (tan z)) (/ -1.0 (fma (tan y) (tan z) -1.0))) (tan a))))
double code(double x, double y, double z, double a) {
return x + (tan((y + z)) - tan(a));
}
double code(double x, double y, double z, double a) {
return x + (((tan(y) + tan(z)) * (-1.0 / fma(tan(y), tan(z), -1.0))) - tan(a));
}
function code(x, y, z, a) return Float64(x + Float64(tan(Float64(y + z)) - tan(a))) end
function code(x, y, z, a) return Float64(x + Float64(Float64(Float64(tan(y) + tan(z)) * Float64(-1.0 / fma(tan(y), tan(z), -1.0))) - tan(a))) end
code[x_, y_, z_, a_] := N[(x + N[(N[Tan[N[(y + z), $MachinePrecision]], $MachinePrecision] - N[Tan[a], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_, a_] := N[(x + N[(N[(N[(N[Tan[y], $MachinePrecision] + N[Tan[z], $MachinePrecision]), $MachinePrecision] * N[(-1.0 / N[(N[Tan[y], $MachinePrecision] * N[Tan[z], $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[Tan[a], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
x + \left(\tan \left(y + z\right) - \tan a\right)
x + \left(\left(\tan y + \tan z\right) \cdot \frac{-1}{\mathsf{fma}\left(\tan y, \tan z, -1\right)} - \tan a\right)
Initial program 13.5
Applied egg-rr0.2
Simplified0.2
[Start]0.2 | \[ x + \left(\left(\tan y + \tan z\right) \cdot \frac{1}{1 - \tan y \cdot \tan z} - \tan a\right)
\] |
|---|---|
associate-*r/ [=>]0.2 | \[ x + \left(\color{blue}{\frac{\left(\tan y + \tan z\right) \cdot 1}{1 - \tan y \cdot \tan z}} - \tan a\right)
\] |
*-rgt-identity [=>]0.2 | \[ x + \left(\frac{\color{blue}{\tan y + \tan z}}{1 - \tan y \cdot \tan z} - \tan a\right)
\] |
Applied egg-rr0.2
Simplified0.2
[Start]0.2 | \[ x + \mathsf{fma}\left(\tan y + \tan z, \frac{-1}{-1 + \tan y \cdot \tan z}, -\tan a\right)
\] |
|---|---|
fma-udef [=>]0.2 | \[ x + \color{blue}{\left(\left(\tan y + \tan z\right) \cdot \frac{-1}{-1 + \tan y \cdot \tan z} + \left(-\tan a\right)\right)}
\] |
unsub-neg [=>]0.2 | \[ x + \color{blue}{\left(\left(\tan y + \tan z\right) \cdot \frac{-1}{-1 + \tan y \cdot \tan z} - \tan a\right)}
\] |
+-commutative [=>]0.2 | \[ x + \left(\left(\tan y + \tan z\right) \cdot \frac{-1}{\color{blue}{\tan y \cdot \tan z + -1}} - \tan a\right)
\] |
fma-def [=>]0.2 | \[ x + \left(\left(\tan y + \tan z\right) \cdot \frac{-1}{\color{blue}{\mathsf{fma}\left(\tan y, \tan z, -1\right)}} - \tan a\right)
\] |
Final simplification0.2
| Alternative 1 | |
|---|---|
| Error | 0.2 |
| Cost | 32832 |
| Alternative 2 | |
|---|---|
| Error | 7.1 |
| Cost | 26569 |
| Alternative 3 | |
|---|---|
| Error | 19.4 |
| Cost | 26185 |
| Alternative 4 | |
|---|---|
| Error | 25.7 |
| Cost | 20041 |
| Alternative 5 | |
|---|---|
| Error | 19.5 |
| Cost | 13252 |
| Alternative 6 | |
|---|---|
| Error | 13.5 |
| Cost | 13248 |
| Alternative 7 | |
|---|---|
| Error | 31.6 |
| Cost | 6720 |
| Alternative 8 | |
|---|---|
| Error | 43.5 |
| Cost | 64 |
herbie shell --seed 2023237
(FPCore (x y z a)
:name "tan-example (used to crash)"
:precision binary64
:pre (and (and (and (or (== x 0.0) (and (<= 0.5884142 x) (<= x 505.5909))) (or (and (<= -1.796658e+308 y) (<= y -9.425585e-310)) (and (<= 1.284938e-309 y) (<= y 1.751224e+308)))) (or (and (<= -1.776707e+308 z) (<= z -8.599796e-310)) (and (<= 3.293145e-311 z) (<= z 1.725154e+308)))) (or (and (<= -1.796658e+308 a) (<= a -9.425585e-310)) (and (<= 1.284938e-309 a) (<= a 1.751224e+308))))
(+ x (- (tan (+ y z)) (tan a))))