(FPCore (x y z) :precision binary64 (* x (sqrt (- (* y y) (* z z)))))
(FPCore (x y z)
:precision binary64
(let* ((t_0 (* z (/ z y))))
(if (<= y -8.509366001875281e-289)
(* x (fma 0.5 t_0 (- y)))
(* x (fma t_0 -0.5 y)))))double code(double x, double y, double z) {
return x * sqrt(((y * y) - (z * z)));
}
double code(double x, double y, double z) {
double t_0 = z * (z / y);
double tmp;
if (y <= -8.509366001875281e-289) {
tmp = x * fma(0.5, t_0, -y);
} else {
tmp = x * fma(t_0, -0.5, y);
}
return tmp;
}
function code(x, y, z) return Float64(x * sqrt(Float64(Float64(y * y) - Float64(z * z)))) end
function code(x, y, z) t_0 = Float64(z * Float64(z / y)) tmp = 0.0 if (y <= -8.509366001875281e-289) tmp = Float64(x * fma(0.5, t_0, Float64(-y))); else tmp = Float64(x * fma(t_0, -0.5, y)); end return tmp end
code[x_, y_, z_] := N[(x * N[Sqrt[N[(N[(y * y), $MachinePrecision] - N[(z * z), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_] := Block[{t$95$0 = N[(z * N[(z / y), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[y, -8.509366001875281e-289], N[(x * N[(0.5 * t$95$0 + (-y)), $MachinePrecision]), $MachinePrecision], N[(x * N[(t$95$0 * -0.5 + y), $MachinePrecision]), $MachinePrecision]]]
x \cdot \sqrt{y \cdot y - z \cdot z}
\begin{array}{l}
t_0 := z \cdot \frac{z}{y}\\
\mathbf{if}\;y \leq -8.509366001875281 \cdot 10^{-289}:\\
\;\;\;\;x \cdot \mathsf{fma}\left(0.5, t_0, -y\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \mathsf{fma}\left(t_0, -0.5, y\right)\\
\end{array}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 25.1 |
|---|---|
| Target | 0.6 |
| Herbie | 0.3 |
if y < -8.509366001875281e-289Initial program 25.3
Taylor expanded in y around -inf 3.3
Simplified0.2
if -8.509366001875281e-289 < y Initial program 24.8
Taylor expanded in y around inf 3.6
Simplified0.4
Final simplification0.3
herbie shell --seed 2022150
(FPCore (x y z)
:name "Diagrams.TwoD.Apollonian:initialConfig from diagrams-contrib-1.3.0.5, B"
:precision binary64
:herbie-target
(if (< y 2.5816096488251695e-278) (- (* x y)) (* x (* (sqrt (+ y z)) (sqrt (- y z)))))
(* x (sqrt (- (* y y) (* z z)))))