x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;a \leq -3.714207486392511 \cdot 10^{-138}:\\
\;\;\;\;x + \frac{y - z}{a - z} \cdot \left(t - x\right)\\
\mathbf{elif}\;a \leq 8.200684544409579 \cdot 10^{-98}:\\
\;\;\;\;\left(t + \left(\frac{x \cdot y}{z} + \frac{a \cdot t}{z}\right)\right) - \left(\frac{a \cdot x}{z} + \frac{y \cdot t}{z}\right)\\
\mathbf{elif}\;a \leq 2.8858241070848407 \cdot 10^{-61}:\\
\;\;\;\;\left(\frac{y \cdot t}{a - z} + \left(x + \frac{x \cdot z}{a - z}\right)\right) - \left(\frac{x \cdot y}{a - z} + \frac{z \cdot t}{a - z}\right)\\
\mathbf{elif}\;a \leq 2.1131810798987226 \cdot 10^{-44}:\\
\;\;\;\;\left(\frac{a \cdot \left(x \cdot y\right)}{z \cdot z} + \left(\left(t + \left(\frac{x \cdot y}{z} + \frac{a \cdot t}{z}\right)\right) + \frac{t \cdot \left(a \cdot a\right)}{z \cdot z}\right)\right) - \left(\frac{a \cdot x}{z} + \left(\frac{a \cdot \left(y \cdot t\right)}{z \cdot z} + \left(\frac{y \cdot t}{z} + \frac{x \cdot \left(a \cdot a\right)}{z \cdot z}\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y - z}{a - z} \cdot \left(t - x\right)\\
\end{array}(FPCore (x y z t a) :precision binary64 (+ x (/ (* (- y z) (- t x)) (- a z))))
(FPCore (x y z t a)
:precision binary64
(if (<= a -3.714207486392511e-138)
(+ x (* (/ (- y z) (- a z)) (- t x)))
(if (<= a 8.200684544409579e-98)
(- (+ t (+ (/ (* x y) z) (/ (* a t) z))) (+ (/ (* a x) z) (/ (* y t) z)))
(if (<= a 2.8858241070848407e-61)
(-
(+ (/ (* y t) (- a z)) (+ x (/ (* x z) (- a z))))
(+ (/ (* x y) (- a z)) (/ (* z t) (- a z))))
(if (<= a 2.1131810798987226e-44)
(-
(+
(/ (* a (* x y)) (* z z))
(+ (+ t (+ (/ (* x y) z) (/ (* a t) z))) (/ (* t (* a a)) (* z z))))
(+
(/ (* a x) z)
(+
(/ (* a (* y t)) (* z z))
(+ (/ (* y t) z) (/ (* x (* a a)) (* z z))))))
(+ x (* (/ (- y z) (- a z)) (- t x))))))))double code(double x, double y, double z, double t, double a) {
return x + (((y - z) * (t - x)) / (a - z));
}
double code(double x, double y, double z, double t, double a) {
double tmp;
if (a <= -3.714207486392511e-138) {
tmp = x + (((y - z) / (a - z)) * (t - x));
} else if (a <= 8.200684544409579e-98) {
tmp = (t + (((x * y) / z) + ((a * t) / z))) - (((a * x) / z) + ((y * t) / z));
} else if (a <= 2.8858241070848407e-61) {
tmp = (((y * t) / (a - z)) + (x + ((x * z) / (a - z)))) - (((x * y) / (a - z)) + ((z * t) / (a - z)));
} else if (a <= 2.1131810798987226e-44) {
tmp = (((a * (x * y)) / (z * z)) + ((t + (((x * y) / z) + ((a * t) / z))) + ((t * (a * a)) / (z * z)))) - (((a * x) / z) + (((a * (y * t)) / (z * z)) + (((y * t) / z) + ((x * (a * a)) / (z * z)))));
} else {
tmp = x + (((y - z) / (a - z)) * (t - x));
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.0 |
|---|---|
| Target | 11.5 |
| Herbie | 9.5 |
if a < -3.71420748639251116e-138 or 2.1131810798987226e-44 < a Initial program 22.2
rmApplied associate-/l*_binary64_140049.9
rmApplied associate-/r/_binary64_140057.9
if -3.71420748639251116e-138 < a < 8.20068454440957901e-98Initial program 28.8
Taylor expanded around inf 12.0
Simplified12.0
if 8.20068454440957901e-98 < a < 2.88582410708484068e-61Initial program 21.7
Taylor expanded around 0 17.0
if 2.88582410708484068e-61 < a < 2.1131810798987226e-44Initial program 27.1
Taylor expanded around inf 31.3
Simplified31.3
Final simplification9.5
herbie shell --seed 2021060
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< z -1.2536131056095036e+188) (- t (* (/ y z) (- t x))) (if (< z 4.446702369113811e+64) (+ x (/ (- y z) (/ (- a z) (- t x)))) (- t (* (/ y z) (- t x)))))
(+ x (/ (* (- y z) (- t x)) (- a z))))