| Alternative 1 | |
|---|---|
| Error | 12.01% |
| Cost | 9804 |
(FPCore (x y z t a) :precision binary64 (+ x (/ (* (- y x) (- z t)) (- a t))))
(FPCore (x y z t a)
:precision binary64
(let* ((t_1 (/ t (- z a))) (t_2 (+ x (/ (* (- y x) (- z t)) (- a t)))))
(if (<= t_2 -5e+293)
(+ x (* (- t z) (/ (- x y) (- a t))))
(if (<= t_2 -4e-287)
t_2
(if (<= t_2 0.0)
(+ y (/ x t_1))
(if (<= t_2 1e+308) t_2 (+ y (/ (- x y) t_1))))))))double code(double x, double y, double z, double t, double a) {
return x + (((y - x) * (z - t)) / (a - t));
}
double code(double x, double y, double z, double t, double a) {
double t_1 = t / (z - a);
double t_2 = x + (((y - x) * (z - t)) / (a - t));
double tmp;
if (t_2 <= -5e+293) {
tmp = x + ((t - z) * ((x - y) / (a - t)));
} else if (t_2 <= -4e-287) {
tmp = t_2;
} else if (t_2 <= 0.0) {
tmp = y + (x / t_1);
} else if (t_2 <= 1e+308) {
tmp = t_2;
} else {
tmp = y + ((x - y) / t_1);
}
return tmp;
}
real(8) function code(x, y, z, t, a)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
real(8), intent (in) :: a
code = x + (((y - x) * (z - t)) / (a - t))
end function
real(8) function code(x, y, z, t, a)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
real(8), intent (in) :: a
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_1 = t / (z - a)
t_2 = x + (((y - x) * (z - t)) / (a - t))
if (t_2 <= (-5d+293)) then
tmp = x + ((t - z) * ((x - y) / (a - t)))
else if (t_2 <= (-4d-287)) then
tmp = t_2
else if (t_2 <= 0.0d0) then
tmp = y + (x / t_1)
else if (t_2 <= 1d+308) then
tmp = t_2
else
tmp = y + ((x - y) / t_1)
end if
code = tmp
end function
public static double code(double x, double y, double z, double t, double a) {
return x + (((y - x) * (z - t)) / (a - t));
}
public static double code(double x, double y, double z, double t, double a) {
double t_1 = t / (z - a);
double t_2 = x + (((y - x) * (z - t)) / (a - t));
double tmp;
if (t_2 <= -5e+293) {
tmp = x + ((t - z) * ((x - y) / (a - t)));
} else if (t_2 <= -4e-287) {
tmp = t_2;
} else if (t_2 <= 0.0) {
tmp = y + (x / t_1);
} else if (t_2 <= 1e+308) {
tmp = t_2;
} else {
tmp = y + ((x - y) / t_1);
}
return tmp;
}
def code(x, y, z, t, a): return x + (((y - x) * (z - t)) / (a - t))
def code(x, y, z, t, a): t_1 = t / (z - a) t_2 = x + (((y - x) * (z - t)) / (a - t)) tmp = 0 if t_2 <= -5e+293: tmp = x + ((t - z) * ((x - y) / (a - t))) elif t_2 <= -4e-287: tmp = t_2 elif t_2 <= 0.0: tmp = y + (x / t_1) elif t_2 <= 1e+308: tmp = t_2 else: tmp = y + ((x - y) / t_1) return tmp
function code(x, y, z, t, a) return Float64(x + Float64(Float64(Float64(y - x) * Float64(z - t)) / Float64(a - t))) end
function code(x, y, z, t, a) t_1 = Float64(t / Float64(z - a)) t_2 = Float64(x + Float64(Float64(Float64(y - x) * Float64(z - t)) / Float64(a - t))) tmp = 0.0 if (t_2 <= -5e+293) tmp = Float64(x + Float64(Float64(t - z) * Float64(Float64(x - y) / Float64(a - t)))); elseif (t_2 <= -4e-287) tmp = t_2; elseif (t_2 <= 0.0) tmp = Float64(y + Float64(x / t_1)); elseif (t_2 <= 1e+308) tmp = t_2; else tmp = Float64(y + Float64(Float64(x - y) / t_1)); end return tmp end
function tmp = code(x, y, z, t, a) tmp = x + (((y - x) * (z - t)) / (a - t)); end
function tmp_2 = code(x, y, z, t, a) t_1 = t / (z - a); t_2 = x + (((y - x) * (z - t)) / (a - t)); tmp = 0.0; if (t_2 <= -5e+293) tmp = x + ((t - z) * ((x - y) / (a - t))); elseif (t_2 <= -4e-287) tmp = t_2; elseif (t_2 <= 0.0) tmp = y + (x / t_1); elseif (t_2 <= 1e+308) tmp = t_2; else tmp = y + ((x - y) / t_1); end tmp_2 = tmp; end
code[x_, y_, z_, t_, a_] := N[(x + N[(N[(N[(y - x), $MachinePrecision] * N[(z - t), $MachinePrecision]), $MachinePrecision] / N[(a - t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_, t_, a_] := Block[{t$95$1 = N[(t / N[(z - a), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(x + N[(N[(N[(y - x), $MachinePrecision] * N[(z - t), $MachinePrecision]), $MachinePrecision] / N[(a - t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -5e+293], N[(x + N[(N[(t - z), $MachinePrecision] * N[(N[(x - y), $MachinePrecision] / N[(a - t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, -4e-287], t$95$2, If[LessEqual[t$95$2, 0.0], N[(y + N[(x / t$95$1), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 1e+308], t$95$2, N[(y + N[(N[(x - y), $MachinePrecision] / t$95$1), $MachinePrecision]), $MachinePrecision]]]]]]]
x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}
\begin{array}{l}
t_1 := \frac{t}{z - a}\\
t_2 := x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\\
\mathbf{if}\;t_2 \leq -5 \cdot 10^{+293}:\\
\;\;\;\;x + \left(t - z\right) \cdot \frac{x - y}{a - t}\\
\mathbf{elif}\;t_2 \leq -4 \cdot 10^{-287}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;t_2 \leq 0:\\
\;\;\;\;y + \frac{x}{t_1}\\
\mathbf{elif}\;t_2 \leq 10^{+308}:\\
\;\;\;\;t_2\\
\mathbf{else}:\\
\;\;\;\;y + \frac{x - y}{t_1}\\
\end{array}
Results
| Original | 38.44% |
|---|---|
| Target | 14.16% |
| Herbie | 11.27% |
if (+.f64 x (/.f64 (*.f64 (-.f64 y x) (-.f64 z t)) (-.f64 a t))) < -5.00000000000000033e293Initial program 95.48
Simplified28.38
[Start]95.48 | \[ x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}
\] |
|---|---|
associate-*l/ [<=]28.38 | \[ x + \color{blue}{\frac{y - x}{a - t} \cdot \left(z - t\right)}
\] |
if -5.00000000000000033e293 < (+.f64 x (/.f64 (*.f64 (-.f64 y x) (-.f64 z t)) (-.f64 a t))) < -4.00000000000000009e-287 or 0.0 < (+.f64 x (/.f64 (*.f64 (-.f64 y x) (-.f64 z t)) (-.f64 a t))) < 1e308Initial program 3.29
if -4.00000000000000009e-287 < (+.f64 x (/.f64 (*.f64 (-.f64 y x) (-.f64 z t)) (-.f64 a t))) < 0.0Initial program 92.38
Simplified91.99
[Start]92.38 | \[ x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}
\] |
|---|---|
associate-/l* [=>]91.99 | \[ x + \color{blue}{\frac{y - x}{\frac{a - t}{z - t}}}
\] |
Taylor expanded in t around inf 3.53
Simplified3.54
[Start]3.53 | \[ \left(-1 \cdot \frac{z \cdot \left(y - x\right)}{t} + y\right) - -1 \cdot \frac{a \cdot \left(y - x\right)}{t}
\] |
|---|---|
+-commutative [=>]3.53 | \[ \color{blue}{\left(y + -1 \cdot \frac{z \cdot \left(y - x\right)}{t}\right)} - -1 \cdot \frac{a \cdot \left(y - x\right)}{t}
\] |
associate--l+ [=>]3.52 | \[ \color{blue}{y + \left(-1 \cdot \frac{z \cdot \left(y - x\right)}{t} - -1 \cdot \frac{a \cdot \left(y - x\right)}{t}\right)}
\] |
*-commutative [=>]3.52 | \[ y + \left(-1 \cdot \frac{\color{blue}{\left(y - x\right) \cdot z}}{t} - -1 \cdot \frac{a \cdot \left(y - x\right)}{t}\right)
\] |
associate-*r/ [=>]3.52 | \[ y + \left(\color{blue}{\frac{-1 \cdot \left(\left(y - x\right) \cdot z\right)}{t}} - -1 \cdot \frac{a \cdot \left(y - x\right)}{t}\right)
\] |
associate-*r/ [=>]3.52 | \[ y + \left(\frac{-1 \cdot \left(\left(y - x\right) \cdot z\right)}{t} - \color{blue}{\frac{-1 \cdot \left(a \cdot \left(y - x\right)\right)}{t}}\right)
\] |
div-sub [<=]3.54 | \[ y + \color{blue}{\frac{-1 \cdot \left(\left(y - x\right) \cdot z\right) - -1 \cdot \left(a \cdot \left(y - x\right)\right)}{t}}
\] |
distribute-lft-out-- [=>]3.54 | \[ y + \frac{\color{blue}{-1 \cdot \left(\left(y - x\right) \cdot z - a \cdot \left(y - x\right)\right)}}{t}
\] |
Taylor expanded in x around inf 3.54
Simplified11.96
[Start]3.54 | \[ y + \frac{\left(z - a\right) \cdot x}{t}
\] |
|---|---|
associate-*r/ [<=]11.96 | \[ y + \color{blue}{\left(z - a\right) \cdot \frac{x}{t}}
\] |
Applied egg-rr3.86
if 1e308 < (+.f64 x (/.f64 (*.f64 (-.f64 y x) (-.f64 z t)) (-.f64 a t))) Initial program 100
Simplified26.61
[Start]100 | \[ x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}
\] |
|---|---|
+-commutative [=>]100 | \[ \color{blue}{\frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} + x}
\] |
associate-*l/ [<=]26.79 | \[ \color{blue}{\frac{y - x}{a - t} \cdot \left(z - t\right)} + x
\] |
fma-def [=>]26.61 | \[ \color{blue}{\mathsf{fma}\left(\frac{y - x}{a - t}, z - t, x\right)}
\] |
Taylor expanded in t around -inf 64.03
Simplified32.29
[Start]64.03 | \[ y + -1 \cdot \frac{-1 \cdot \left(a \cdot \left(y - x\right)\right) + z \cdot \left(y - x\right)}{t}
\] |
|---|---|
mul-1-neg [=>]64.03 | \[ y + \color{blue}{\left(-\frac{-1 \cdot \left(a \cdot \left(y - x\right)\right) + z \cdot \left(y - x\right)}{t}\right)}
\] |
unsub-neg [=>]64.03 | \[ \color{blue}{y - \frac{-1 \cdot \left(a \cdot \left(y - x\right)\right) + z \cdot \left(y - x\right)}{t}}
\] |
+-commutative [=>]64.03 | \[ y - \frac{\color{blue}{z \cdot \left(y - x\right) + -1 \cdot \left(a \cdot \left(y - x\right)\right)}}{t}
\] |
associate-*r* [=>]64.03 | \[ y - \frac{z \cdot \left(y - x\right) + \color{blue}{\left(-1 \cdot a\right) \cdot \left(y - x\right)}}{t}
\] |
distribute-rgt-out [=>]64.03 | \[ y - \frac{\color{blue}{\left(y - x\right) \cdot \left(z + -1 \cdot a\right)}}{t}
\] |
associate-/l* [=>]32.29 | \[ y - \color{blue}{\frac{y - x}{\frac{t}{z + -1 \cdot a}}}
\] |
mul-1-neg [=>]32.29 | \[ y - \frac{y - x}{\frac{t}{z + \color{blue}{\left(-a\right)}}}
\] |
Final simplification11.27
| Alternative 1 | |
|---|---|
| Error | 12.01% |
| Cost | 9804 |
| Alternative 2 | |
|---|---|
| Error | 11.96% |
| Cost | 3532 |
| Alternative 3 | |
|---|---|
| Error | 12.05% |
| Cost | 3532 |
| Alternative 4 | |
|---|---|
| Error | 40.42% |
| Cost | 1504 |
| Alternative 5 | |
|---|---|
| Error | 37.54% |
| Cost | 1500 |
| Alternative 6 | |
|---|---|
| Error | 31.84% |
| Cost | 1368 |
| Alternative 7 | |
|---|---|
| Error | 31.54% |
| Cost | 1368 |
| Alternative 8 | |
|---|---|
| Error | 28.57% |
| Cost | 1364 |
| Alternative 9 | |
|---|---|
| Error | 27.33% |
| Cost | 1364 |
| Alternative 10 | |
|---|---|
| Error | 26.52% |
| Cost | 1364 |
| Alternative 11 | |
|---|---|
| Error | 39.9% |
| Cost | 1240 |
| Alternative 12 | |
|---|---|
| Error | 31.14% |
| Cost | 1236 |
| Alternative 13 | |
|---|---|
| Error | 16.1% |
| Cost | 1096 |
| Alternative 14 | |
|---|---|
| Error | 47.14% |
| Cost | 713 |
| Alternative 15 | |
|---|---|
| Error | 39.53% |
| Cost | 713 |
| Alternative 16 | |
|---|---|
| Error | 55.38% |
| Cost | 328 |
| Alternative 17 | |
|---|---|
| Error | 71.81% |
| Cost | 64 |
herbie shell --seed 2023088
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))