(FPCore (yx xx zy xy zx yy) :precision binary64 (- (* (- yx xx) (- zy xy)) (* (- zx xx) (- yy xy))))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { return ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy)); }
real(8) function code(yx, xx, zy, xy, zx, yy) real(8), intent (in) :: yx real(8), intent (in) :: xx real(8), intent (in) :: zy real(8), intent (in) :: xy real(8), intent (in) :: zx real(8), intent (in) :: yy code = ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy)) end function
public static double code(double yx, double xx, double zy, double xy, double zx, double yy) { return ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy)); }
def code(yx, xx, zy, xy, zx, yy): return ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy))
function code(yx, xx, zy, xy, zx, yy) return Float64(Float64(Float64(yx - xx) * Float64(zy - xy)) - Float64(Float64(zx - xx) * Float64(yy - xy))) end
function tmp = code(yx, xx, zy, xy, zx, yy) tmp = ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy)); end
code[yx_, xx_, zy_, xy_, zx_, yy_] := N[(N[(N[(yx - xx), $MachinePrecision] * N[(zy - xy), $MachinePrecision]), $MachinePrecision] - N[(N[(zx - xx), $MachinePrecision] * N[(yy - xy), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l} \\ \left(yx - xx\right) \cdot \left(zy - xy\right) - \left(zx - xx\right) \cdot \left(yy - xy\right) \end{array}
Sampling outcomes in binary64 precision:
Herbie found 13 alternatives:
Alternative | Accuracy | Speedup |
---|
(FPCore (yx xx zy xy zx yy) :precision binary64 (- (* (- yx xx) (- zy xy)) (* (- zx xx) (- yy xy))))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { return ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy)); }
real(8) function code(yx, xx, zy, xy, zx, yy) real(8), intent (in) :: yx real(8), intent (in) :: xx real(8), intent (in) :: zy real(8), intent (in) :: xy real(8), intent (in) :: zx real(8), intent (in) :: yy code = ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy)) end function
public static double code(double yx, double xx, double zy, double xy, double zx, double yy) { return ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy)); }
def code(yx, xx, zy, xy, zx, yy): return ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy))
function code(yx, xx, zy, xy, zx, yy) return Float64(Float64(Float64(yx - xx) * Float64(zy - xy)) - Float64(Float64(zx - xx) * Float64(yy - xy))) end
function tmp = code(yx, xx, zy, xy, zx, yy) tmp = ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy)); end
code[yx_, xx_, zy_, xy_, zx_, yy_] := N[(N[(N[(yx - xx), $MachinePrecision] * N[(zy - xy), $MachinePrecision]), $MachinePrecision] - N[(N[(zx - xx), $MachinePrecision] * N[(yy - xy), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l} \\ \left(yx - xx\right) \cdot \left(zy - xy\right) - \left(zx - xx\right) \cdot \left(yy - xy\right) \end{array}
(FPCore (yx xx zy xy zx yy) :precision binary64 (fma (- zy yy) (- xx) (fma (- xy yy) zx (* (- zy xy) yx))))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { return fma((zy - yy), -xx, fma((xy - yy), zx, ((zy - xy) * yx))); }
function code(yx, xx, zy, xy, zx, yy) return fma(Float64(zy - yy), Float64(-xx), fma(Float64(xy - yy), zx, Float64(Float64(zy - xy) * yx))) end
code[yx_, xx_, zy_, xy_, zx_, yy_] := N[(N[(zy - yy), $MachinePrecision] * (-xx) + N[(N[(xy - yy), $MachinePrecision] * zx + N[(N[(zy - xy), $MachinePrecision] * yx), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l} \\ \mathsf{fma}\left(zy - yy, -xx, \mathsf{fma}\left(xy - yy, zx, \left(zy - xy\right) \cdot yx\right)\right) \end{array}
Initial program 82.6%
Taylor expanded in xx around -inf
associate-*r*
N/A
mul-1-neg
N/A
lower-*.f64
N/A
lower-neg.f64
N/A
lower--.f64
N/A
Applied rewrites83.7%
Taylor expanded in xx around 0
Applied rewrites96.9%
(FPCore (yx xx zy xy zx yy) :precision binary64 (let* ((t_0 (- (* (- yx xx) (- zy xy)) (* (- zx xx) (- yy xy))))) (if (<= t_0 INFINITY) t_0 (* (- zx yx) xy))))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { double t_0 = ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy)); double tmp; if (t_0 <= ((double) INFINITY)) { tmp = t_0; } else { tmp = (zx - yx) * xy; } return tmp; }
public static double code(double yx, double xx, double zy, double xy, double zx, double yy) { double t_0 = ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy)); double tmp; if (t_0 <= Double.POSITIVE_INFINITY) { tmp = t_0; } else { tmp = (zx - yx) * xy; } return tmp; }
def code(yx, xx, zy, xy, zx, yy): t_0 = ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy)) tmp = 0 if t_0 <= math.inf: tmp = t_0 else: tmp = (zx - yx) * xy return tmp
function code(yx, xx, zy, xy, zx, yy) t_0 = Float64(Float64(Float64(yx - xx) * Float64(zy - xy)) - Float64(Float64(zx - xx) * Float64(yy - xy))) tmp = 0.0 if (t_0 <= Inf) tmp = t_0; else tmp = Float64(Float64(zx - yx) * xy); end return tmp end
function tmp_2 = code(yx, xx, zy, xy, zx, yy) t_0 = ((yx - xx) * (zy - xy)) - ((zx - xx) * (yy - xy)); tmp = 0.0; if (t_0 <= Inf) tmp = t_0; else tmp = (zx - yx) * xy; end tmp_2 = tmp; end
code[yx_, xx_, zy_, xy_, zx_, yy_] := Block[{t$95$0 = N[(N[(N[(yx - xx), $MachinePrecision] * N[(zy - xy), $MachinePrecision]), $MachinePrecision] - N[(N[(zx - xx), $MachinePrecision] * N[(yy - xy), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, Infinity], t$95$0, N[(N[(zx - yx), $MachinePrecision] * xy), $MachinePrecision]]]
\begin{array}{l} \\ \begin{array}{l} t_0 := \left(yx - xx\right) \cdot \left(zy - xy\right) - \left(zx - xx\right) \cdot \left(yy - xy\right)\\ \mathbf{if}\;t\_0 \leq \infty:\\ \;\;\;\;t\_0\\ \mathbf{else}:\\ \;\;\;\;\left(zx - yx\right) \cdot xy\\ \end{array} \end{array}
if (-.f64 (*.f64 (-.f64 yx xx) (-.f64 zy xy)) (*.f64 (-.f64 zx xx) (-.f64 yy xy))) < +inf.0
Initial program 94.4%
if +inf.0 < (-.f64 (*.f64 (-.f64 yx xx) (-.f64 zy xy)) (*.f64 (-.f64 zx xx) (-.f64 yy xy)))
Initial program 0.0%
Taylor expanded in xy around inf
*-commutative
N/A
lower-*.f64
N/A
cancel-sign-sub-inv
N/A
metadata-eval
N/A
*-lft-identity
N/A
associate-+r-
N/A
lower--.f64
N/A
lower-+.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
unsub-neg
N/A
remove-double-neg
N/A
lower--.f64
20.1
Applied rewrites20.1%
Taylor expanded in yx around 0
Applied rewrites59.8%
(FPCore (yx xx zy xy zx yy) :precision binary64 (if (or (<= xy -1.9e+24) (not (<= xy 6e+69))) (fma (- xy yy) zx (* (- zy xy) yx)) (fma (- xx zx) yy (* (- yx xx) zy))))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((xy <= -1.9e+24) || !(xy <= 6e+69)) { tmp = fma((xy - yy), zx, ((zy - xy) * yx)); } else { tmp = fma((xx - zx), yy, ((yx - xx) * zy)); } return tmp; }
function code(yx, xx, zy, xy, zx, yy) tmp = 0.0 if ((xy <= -1.9e+24) || !(xy <= 6e+69)) tmp = fma(Float64(xy - yy), zx, Float64(Float64(zy - xy) * yx)); else tmp = fma(Float64(xx - zx), yy, Float64(Float64(yx - xx) * zy)); end return tmp end
code[yx_, xx_, zy_, xy_, zx_, yy_] := If[Or[LessEqual[xy, -1.9e+24], N[Not[LessEqual[xy, 6e+69]], $MachinePrecision]], N[(N[(xy - yy), $MachinePrecision] * zx + N[(N[(zy - xy), $MachinePrecision] * yx), $MachinePrecision]), $MachinePrecision], N[(N[(xx - zx), $MachinePrecision] * yy + N[(N[(yx - xx), $MachinePrecision] * zy), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;xy \leq -1.9 \cdot 10^{+24} \lor \neg \left(xy \leq 6 \cdot 10^{+69}\right):\\ \;\;\;\;\mathsf{fma}\left(xy - yy, zx, \left(zy - xy\right) \cdot yx\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(xx - zx, yy, \left(yx - xx\right) \cdot zy\right)\\ \end{array} \end{array}
if xy < -1.90000000000000008e24 or 5.99999999999999967e69 < xy
Initial program 67.6%
Taylor expanded in xx around 0
sub-neg
N/A
+-commutative
N/A
*-commutative
N/A
distribute-lft-neg-in
N/A
mul-1-neg
N/A
lower-fma.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
N/A
*-commutative
N/A
lower-*.f64
N/A
lower--.f64
83.0
Applied rewrites83.0%
if -1.90000000000000008e24 < xy < 5.99999999999999967e69
Initial program 94.5%
Taylor expanded in xy around 0
sub-neg
N/A
+-commutative
N/A
*-commutative
N/A
distribute-lft-neg-in
N/A
mul-1-neg
N/A
lower-fma.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
N/A
*-commutative
N/A
lower-*.f64
N/A
lower--.f64
91.2
Applied rewrites91.2%
Final simplification87.6%
(FPCore (yx xx zy xy zx yy) :precision binary64 (if (or (<= xy -1e+97) (not (<= xy 5.2e+86))) (* (- zx yx) xy) (fma (- xx zx) yy (* (- yx xx) zy))))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((xy <= -1e+97) || !(xy <= 5.2e+86)) { tmp = (zx - yx) * xy; } else { tmp = fma((xx - zx), yy, ((yx - xx) * zy)); } return tmp; }
function code(yx, xx, zy, xy, zx, yy) tmp = 0.0 if ((xy <= -1e+97) || !(xy <= 5.2e+86)) tmp = Float64(Float64(zx - yx) * xy); else tmp = fma(Float64(xx - zx), yy, Float64(Float64(yx - xx) * zy)); end return tmp end
code[yx_, xx_, zy_, xy_, zx_, yy_] := If[Or[LessEqual[xy, -1e+97], N[Not[LessEqual[xy, 5.2e+86]], $MachinePrecision]], N[(N[(zx - yx), $MachinePrecision] * xy), $MachinePrecision], N[(N[(xx - zx), $MachinePrecision] * yy + N[(N[(yx - xx), $MachinePrecision] * zy), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;xy \leq -1 \cdot 10^{+97} \lor \neg \left(xy \leq 5.2 \cdot 10^{+86}\right):\\ \;\;\;\;\left(zx - yx\right) \cdot xy\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(xx - zx, yy, \left(yx - xx\right) \cdot zy\right)\\ \end{array} \end{array}
if xy < -1.0000000000000001e97 or 5.1999999999999995e86 < xy
Initial program 65.2%
Taylor expanded in xy around inf
*-commutative
N/A
lower-*.f64
N/A
cancel-sign-sub-inv
N/A
metadata-eval
N/A
*-lft-identity
N/A
associate-+r-
N/A
lower--.f64
N/A
lower-+.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
unsub-neg
N/A
remove-double-neg
N/A
lower--.f64
57.8
Applied rewrites57.8%
Taylor expanded in yx around 0
Applied rewrites76.2%
if -1.0000000000000001e97 < xy < 5.1999999999999995e86
Initial program 93.5%
Taylor expanded in xy around 0
sub-neg
N/A
+-commutative
N/A
*-commutative
N/A
distribute-lft-neg-in
N/A
mul-1-neg
N/A
lower-fma.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
N/A
*-commutative
N/A
lower-*.f64
N/A
lower--.f64
88.9
Applied rewrites88.9%
Final simplification84.0%
(FPCore (yx xx zy xy zx yy) :precision binary64 (if (or (<= zx -9.2e+69) (not (<= zx 3.7e+80))) (* (- xy yy) zx) (fma (- yx xx) zy (* yy xx))))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((zx <= -9.2e+69) || !(zx <= 3.7e+80)) { tmp = (xy - yy) * zx; } else { tmp = fma((yx - xx), zy, (yy * xx)); } return tmp; }
function code(yx, xx, zy, xy, zx, yy) tmp = 0.0 if ((zx <= -9.2e+69) || !(zx <= 3.7e+80)) tmp = Float64(Float64(xy - yy) * zx); else tmp = fma(Float64(yx - xx), zy, Float64(yy * xx)); end return tmp end
code[yx_, xx_, zy_, xy_, zx_, yy_] := If[Or[LessEqual[zx, -9.2e+69], N[Not[LessEqual[zx, 3.7e+80]], $MachinePrecision]], N[(N[(xy - yy), $MachinePrecision] * zx), $MachinePrecision], N[(N[(yx - xx), $MachinePrecision] * zy + N[(yy * xx), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;zx \leq -9.2 \cdot 10^{+69} \lor \neg \left(zx \leq 3.7 \cdot 10^{+80}\right):\\ \;\;\;\;\left(xy - yy\right) \cdot zx\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(yx - xx, zy, yy \cdot xx\right)\\ \end{array} \end{array}
if zx < -9.20000000000000067e69 or 3.69999999999999996e80 < zx
Initial program 88.4%
Taylor expanded in zx around inf
*-commutative
N/A
sub-neg
N/A
remove-double-neg
N/A
distribute-neg-in
N/A
+-commutative
N/A
sub-neg
N/A
mul-1-neg
N/A
lower-*.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
78.5
Applied rewrites78.5%
if -9.20000000000000067e69 < zx < 3.69999999999999996e80
Initial program 79.2%
Taylor expanded in zx around 0
associate-*r*
N/A
mul-1-neg
N/A
cancel-sign-sub
N/A
lower-fma.f64
N/A
lower--.f64
N/A
lower--.f64
N/A
*-commutative
N/A
lower-*.f64
N/A
lower--.f64
70.4
Applied rewrites70.4%
Taylor expanded in xy around 0
Applied rewrites65.2%
Final simplification70.1%
(FPCore (yx xx zy xy zx yy) :precision binary64 (if (or (<= yy -3.6e-12) (not (<= yy 6.8e+37))) (* (- xx zx) yy) (* (- zy xy) yx)))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((yy <= -3.6e-12) || !(yy <= 6.8e+37)) { tmp = (xx - zx) * yy; } else { tmp = (zy - xy) * yx; } return tmp; }
real(8) function code(yx, xx, zy, xy, zx, yy) real(8), intent (in) :: yx real(8), intent (in) :: xx real(8), intent (in) :: zy real(8), intent (in) :: xy real(8), intent (in) :: zx real(8), intent (in) :: yy real(8) :: tmp if ((yy <= (-3.6d-12)) .or. (.not. (yy <= 6.8d+37))) then tmp = (xx - zx) * yy else tmp = (zy - xy) * yx end if code = tmp end function
public static double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((yy <= -3.6e-12) || !(yy <= 6.8e+37)) { tmp = (xx - zx) * yy; } else { tmp = (zy - xy) * yx; } return tmp; }
def code(yx, xx, zy, xy, zx, yy): tmp = 0 if (yy <= -3.6e-12) or not (yy <= 6.8e+37): tmp = (xx - zx) * yy else: tmp = (zy - xy) * yx return tmp
function code(yx, xx, zy, xy, zx, yy) tmp = 0.0 if ((yy <= -3.6e-12) || !(yy <= 6.8e+37)) tmp = Float64(Float64(xx - zx) * yy); else tmp = Float64(Float64(zy - xy) * yx); end return tmp end
function tmp_2 = code(yx, xx, zy, xy, zx, yy) tmp = 0.0; if ((yy <= -3.6e-12) || ~((yy <= 6.8e+37))) tmp = (xx - zx) * yy; else tmp = (zy - xy) * yx; end tmp_2 = tmp; end
code[yx_, xx_, zy_, xy_, zx_, yy_] := If[Or[LessEqual[yy, -3.6e-12], N[Not[LessEqual[yy, 6.8e+37]], $MachinePrecision]], N[(N[(xx - zx), $MachinePrecision] * yy), $MachinePrecision], N[(N[(zy - xy), $MachinePrecision] * yx), $MachinePrecision]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;yy \leq -3.6 \cdot 10^{-12} \lor \neg \left(yy \leq 6.8 \cdot 10^{+37}\right):\\ \;\;\;\;\left(xx - zx\right) \cdot yy\\ \mathbf{else}:\\ \;\;\;\;\left(zy - xy\right) \cdot yx\\ \end{array} \end{array}
if yy < -3.6e-12 or 6.80000000000000011e37 < yy
Initial program 86.4%
Taylor expanded in yy around inf
*-commutative
N/A
sub-neg
N/A
remove-double-neg
N/A
distribute-neg-in
N/A
+-commutative
N/A
sub-neg
N/A
mul-1-neg
N/A
lower-*.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
71.7
Applied rewrites71.7%
if -3.6e-12 < yy < 6.80000000000000011e37
Initial program 79.0%
Taylor expanded in yx around inf
*-commutative
N/A
lower-*.f64
N/A
lower--.f64
56.4
Applied rewrites56.4%
Final simplification63.9%
(FPCore (yx xx zy xy zx yy) :precision binary64 (if (or (<= xy -4.7e+33) (not (<= xy 6.5e+84))) (* (- zx yx) xy) (* (- xx zx) yy)))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((xy <= -4.7e+33) || !(xy <= 6.5e+84)) { tmp = (zx - yx) * xy; } else { tmp = (xx - zx) * yy; } return tmp; }
real(8) function code(yx, xx, zy, xy, zx, yy) real(8), intent (in) :: yx real(8), intent (in) :: xx real(8), intent (in) :: zy real(8), intent (in) :: xy real(8), intent (in) :: zx real(8), intent (in) :: yy real(8) :: tmp if ((xy <= (-4.7d+33)) .or. (.not. (xy <= 6.5d+84))) then tmp = (zx - yx) * xy else tmp = (xx - zx) * yy end if code = tmp end function
public static double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((xy <= -4.7e+33) || !(xy <= 6.5e+84)) { tmp = (zx - yx) * xy; } else { tmp = (xx - zx) * yy; } return tmp; }
def code(yx, xx, zy, xy, zx, yy): tmp = 0 if (xy <= -4.7e+33) or not (xy <= 6.5e+84): tmp = (zx - yx) * xy else: tmp = (xx - zx) * yy return tmp
function code(yx, xx, zy, xy, zx, yy) tmp = 0.0 if ((xy <= -4.7e+33) || !(xy <= 6.5e+84)) tmp = Float64(Float64(zx - yx) * xy); else tmp = Float64(Float64(xx - zx) * yy); end return tmp end
function tmp_2 = code(yx, xx, zy, xy, zx, yy) tmp = 0.0; if ((xy <= -4.7e+33) || ~((xy <= 6.5e+84))) tmp = (zx - yx) * xy; else tmp = (xx - zx) * yy; end tmp_2 = tmp; end
code[yx_, xx_, zy_, xy_, zx_, yy_] := If[Or[LessEqual[xy, -4.7e+33], N[Not[LessEqual[xy, 6.5e+84]], $MachinePrecision]], N[(N[(zx - yx), $MachinePrecision] * xy), $MachinePrecision], N[(N[(xx - zx), $MachinePrecision] * yy), $MachinePrecision]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;xy \leq -4.7 \cdot 10^{+33} \lor \neg \left(xy \leq 6.5 \cdot 10^{+84}\right):\\ \;\;\;\;\left(zx - yx\right) \cdot xy\\ \mathbf{else}:\\ \;\;\;\;\left(xx - zx\right) \cdot yy\\ \end{array} \end{array}
if xy < -4.6999999999999998e33 or 6.50000000000000027e84 < xy
Initial program 66.6%
Taylor expanded in xy around inf
*-commutative
N/A
lower-*.f64
N/A
cancel-sign-sub-inv
N/A
metadata-eval
N/A
*-lft-identity
N/A
associate-+r-
N/A
lower--.f64
N/A
lower-+.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
unsub-neg
N/A
remove-double-neg
N/A
lower--.f64
56.0
Applied rewrites56.0%
Taylor expanded in yx around 0
Applied rewrites74.1%
if -4.6999999999999998e33 < xy < 6.50000000000000027e84
Initial program 93.9%
Taylor expanded in yy around inf
*-commutative
N/A
sub-neg
N/A
remove-double-neg
N/A
distribute-neg-in
N/A
+-commutative
N/A
sub-neg
N/A
mul-1-neg
N/A
lower-*.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
54.5
Applied rewrites54.5%
Final simplification62.6%
(FPCore (yx xx zy xy zx yy) :precision binary64 (if (or (<= xy -4.1e+32) (not (<= xy 9.2e+82))) (* (- zx yx) xy) (* (- zx) yy)))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((xy <= -4.1e+32) || !(xy <= 9.2e+82)) { tmp = (zx - yx) * xy; } else { tmp = -zx * yy; } return tmp; }
real(8) function code(yx, xx, zy, xy, zx, yy) real(8), intent (in) :: yx real(8), intent (in) :: xx real(8), intent (in) :: zy real(8), intent (in) :: xy real(8), intent (in) :: zx real(8), intent (in) :: yy real(8) :: tmp if ((xy <= (-4.1d+32)) .or. (.not. (xy <= 9.2d+82))) then tmp = (zx - yx) * xy else tmp = -zx * yy end if code = tmp end function
public static double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((xy <= -4.1e+32) || !(xy <= 9.2e+82)) { tmp = (zx - yx) * xy; } else { tmp = -zx * yy; } return tmp; }
def code(yx, xx, zy, xy, zx, yy): tmp = 0 if (xy <= -4.1e+32) or not (xy <= 9.2e+82): tmp = (zx - yx) * xy else: tmp = -zx * yy return tmp
function code(yx, xx, zy, xy, zx, yy) tmp = 0.0 if ((xy <= -4.1e+32) || !(xy <= 9.2e+82)) tmp = Float64(Float64(zx - yx) * xy); else tmp = Float64(Float64(-zx) * yy); end return tmp end
function tmp_2 = code(yx, xx, zy, xy, zx, yy) tmp = 0.0; if ((xy <= -4.1e+32) || ~((xy <= 9.2e+82))) tmp = (zx - yx) * xy; else tmp = -zx * yy; end tmp_2 = tmp; end
code[yx_, xx_, zy_, xy_, zx_, yy_] := If[Or[LessEqual[xy, -4.1e+32], N[Not[LessEqual[xy, 9.2e+82]], $MachinePrecision]], N[(N[(zx - yx), $MachinePrecision] * xy), $MachinePrecision], N[((-zx) * yy), $MachinePrecision]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;xy \leq -4.1 \cdot 10^{+32} \lor \neg \left(xy \leq 9.2 \cdot 10^{+82}\right):\\ \;\;\;\;\left(zx - yx\right) \cdot xy\\ \mathbf{else}:\\ \;\;\;\;\left(-zx\right) \cdot yy\\ \end{array} \end{array}
if xy < -4.09999999999999981e32 or 9.19999999999999953e82 < xy
Initial program 66.6%
Taylor expanded in xy around inf
*-commutative
N/A
lower-*.f64
N/A
cancel-sign-sub-inv
N/A
metadata-eval
N/A
*-lft-identity
N/A
associate-+r-
N/A
lower--.f64
N/A
lower-+.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
unsub-neg
N/A
remove-double-neg
N/A
lower--.f64
56.0
Applied rewrites56.0%
Taylor expanded in yx around 0
Applied rewrites74.1%
if -4.09999999999999981e32 < xy < 9.19999999999999953e82
Initial program 93.9%
Taylor expanded in yy around inf
*-commutative
N/A
sub-neg
N/A
remove-double-neg
N/A
distribute-neg-in
N/A
+-commutative
N/A
sub-neg
N/A
mul-1-neg
N/A
lower-*.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
54.5
Applied rewrites54.5%
Taylor expanded in xx around 0
Applied rewrites34.7%
Final simplification51.0%
(FPCore (yx xx zy xy zx yy) :precision binary64 (if (<= yy -3.6e-12) (fma yy xx (* yy (- zx))) (if (<= yy 6.8e+37) (* (- zy xy) yx) (* (- xx zx) yy))))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if (yy <= -3.6e-12) { tmp = fma(yy, xx, (yy * -zx)); } else if (yy <= 6.8e+37) { tmp = (zy - xy) * yx; } else { tmp = (xx - zx) * yy; } return tmp; }
function code(yx, xx, zy, xy, zx, yy) tmp = 0.0 if (yy <= -3.6e-12) tmp = fma(yy, xx, Float64(yy * Float64(-zx))); elseif (yy <= 6.8e+37) tmp = Float64(Float64(zy - xy) * yx); else tmp = Float64(Float64(xx - zx) * yy); end return tmp end
code[yx_, xx_, zy_, xy_, zx_, yy_] := If[LessEqual[yy, -3.6e-12], N[(yy * xx + N[(yy * (-zx)), $MachinePrecision]), $MachinePrecision], If[LessEqual[yy, 6.8e+37], N[(N[(zy - xy), $MachinePrecision] * yx), $MachinePrecision], N[(N[(xx - zx), $MachinePrecision] * yy), $MachinePrecision]]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;yy \leq -3.6 \cdot 10^{-12}:\\ \;\;\;\;\mathsf{fma}\left(yy, xx, yy \cdot \left(-zx\right)\right)\\ \mathbf{elif}\;yy \leq 6.8 \cdot 10^{+37}:\\ \;\;\;\;\left(zy - xy\right) \cdot yx\\ \mathbf{else}:\\ \;\;\;\;\left(xx - zx\right) \cdot yy\\ \end{array} \end{array}
if yy < -3.6e-12
Initial program 85.1%
Taylor expanded in yy around inf
*-commutative
N/A
sub-neg
N/A
remove-double-neg
N/A
distribute-neg-in
N/A
+-commutative
N/A
sub-neg
N/A
mul-1-neg
N/A
lower-*.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
71.4
Applied rewrites71.4%
Applied rewrites71.4%
if -3.6e-12 < yy < 6.80000000000000011e37
Initial program 79.0%
Taylor expanded in yx around inf
*-commutative
N/A
lower-*.f64
N/A
lower--.f64
56.4
Applied rewrites56.4%
if 6.80000000000000011e37 < yy
Initial program 88.2%
Taylor expanded in yy around inf
*-commutative
N/A
sub-neg
N/A
remove-double-neg
N/A
distribute-neg-in
N/A
+-commutative
N/A
sub-neg
N/A
mul-1-neg
N/A
lower-*.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
72.2
Applied rewrites72.2%
(FPCore (yx xx zy xy zx yy) :precision binary64 (if (or (<= yy -9.2e-13) (not (<= yy 1.86e+28))) (* (- zx) yy) (* yx zy)))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((yy <= -9.2e-13) || !(yy <= 1.86e+28)) { tmp = -zx * yy; } else { tmp = yx * zy; } return tmp; }
real(8) function code(yx, xx, zy, xy, zx, yy) real(8), intent (in) :: yx real(8), intent (in) :: xx real(8), intent (in) :: zy real(8), intent (in) :: xy real(8), intent (in) :: zx real(8), intent (in) :: yy real(8) :: tmp if ((yy <= (-9.2d-13)) .or. (.not. (yy <= 1.86d+28))) then tmp = -zx * yy else tmp = yx * zy end if code = tmp end function
public static double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((yy <= -9.2e-13) || !(yy <= 1.86e+28)) { tmp = -zx * yy; } else { tmp = yx * zy; } return tmp; }
def code(yx, xx, zy, xy, zx, yy): tmp = 0 if (yy <= -9.2e-13) or not (yy <= 1.86e+28): tmp = -zx * yy else: tmp = yx * zy return tmp
function code(yx, xx, zy, xy, zx, yy) tmp = 0.0 if ((yy <= -9.2e-13) || !(yy <= 1.86e+28)) tmp = Float64(Float64(-zx) * yy); else tmp = Float64(yx * zy); end return tmp end
function tmp_2 = code(yx, xx, zy, xy, zx, yy) tmp = 0.0; if ((yy <= -9.2e-13) || ~((yy <= 1.86e+28))) tmp = -zx * yy; else tmp = yx * zy; end tmp_2 = tmp; end
code[yx_, xx_, zy_, xy_, zx_, yy_] := If[Or[LessEqual[yy, -9.2e-13], N[Not[LessEqual[yy, 1.86e+28]], $MachinePrecision]], N[((-zx) * yy), $MachinePrecision], N[(yx * zy), $MachinePrecision]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;yy \leq -9.2 \cdot 10^{-13} \lor \neg \left(yy \leq 1.86 \cdot 10^{+28}\right):\\ \;\;\;\;\left(-zx\right) \cdot yy\\ \mathbf{else}:\\ \;\;\;\;yx \cdot zy\\ \end{array} \end{array}
if yy < -9.19999999999999917e-13 or 1.86000000000000009e28 < yy
Initial program 86.6%
Taylor expanded in yy around inf
*-commutative
N/A
sub-neg
N/A
remove-double-neg
N/A
distribute-neg-in
N/A
+-commutative
N/A
sub-neg
N/A
mul-1-neg
N/A
lower-*.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
71.4
Applied rewrites71.4%
Taylor expanded in xx around 0
Applied rewrites46.3%
if -9.19999999999999917e-13 < yy < 1.86000000000000009e28
Initial program 78.6%
Taylor expanded in yx around inf
*-commutative
N/A
lower-*.f64
N/A
lower--.f64
56.5
Applied rewrites56.5%
Taylor expanded in zy around inf
Applied rewrites32.5%
Final simplification39.3%
(FPCore (yx xx zy xy zx yy) :precision binary64 (if (<= xy -3.2e+36) (* (- yx) xy) (if (<= xy 4.6e+85) (* (- zx) yy) (* zx xy))))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if (xy <= -3.2e+36) { tmp = -yx * xy; } else if (xy <= 4.6e+85) { tmp = -zx * yy; } else { tmp = zx * xy; } return tmp; }
real(8) function code(yx, xx, zy, xy, zx, yy) real(8), intent (in) :: yx real(8), intent (in) :: xx real(8), intent (in) :: zy real(8), intent (in) :: xy real(8), intent (in) :: zx real(8), intent (in) :: yy real(8) :: tmp if (xy <= (-3.2d+36)) then tmp = -yx * xy else if (xy <= 4.6d+85) then tmp = -zx * yy else tmp = zx * xy end if code = tmp end function
public static double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if (xy <= -3.2e+36) { tmp = -yx * xy; } else if (xy <= 4.6e+85) { tmp = -zx * yy; } else { tmp = zx * xy; } return tmp; }
def code(yx, xx, zy, xy, zx, yy): tmp = 0 if xy <= -3.2e+36: tmp = -yx * xy elif xy <= 4.6e+85: tmp = -zx * yy else: tmp = zx * xy return tmp
function code(yx, xx, zy, xy, zx, yy) tmp = 0.0 if (xy <= -3.2e+36) tmp = Float64(Float64(-yx) * xy); elseif (xy <= 4.6e+85) tmp = Float64(Float64(-zx) * yy); else tmp = Float64(zx * xy); end return tmp end
function tmp_2 = code(yx, xx, zy, xy, zx, yy) tmp = 0.0; if (xy <= -3.2e+36) tmp = -yx * xy; elseif (xy <= 4.6e+85) tmp = -zx * yy; else tmp = zx * xy; end tmp_2 = tmp; end
code[yx_, xx_, zy_, xy_, zx_, yy_] := If[LessEqual[xy, -3.2e+36], N[((-yx) * xy), $MachinePrecision], If[LessEqual[xy, 4.6e+85], N[((-zx) * yy), $MachinePrecision], N[(zx * xy), $MachinePrecision]]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;xy \leq -3.2 \cdot 10^{+36}:\\ \;\;\;\;\left(-yx\right) \cdot xy\\ \mathbf{elif}\;xy \leq 4.6 \cdot 10^{+85}:\\ \;\;\;\;\left(-zx\right) \cdot yy\\ \mathbf{else}:\\ \;\;\;\;zx \cdot xy\\ \end{array} \end{array}
if xy < -3.1999999999999999e36
Initial program 68.4%
Taylor expanded in xy around inf
*-commutative
N/A
lower-*.f64
N/A
cancel-sign-sub-inv
N/A
metadata-eval
N/A
*-lft-identity
N/A
associate-+r-
N/A
lower--.f64
N/A
lower-+.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
unsub-neg
N/A
remove-double-neg
N/A
lower--.f64
60.3
Applied rewrites60.3%
Taylor expanded in yx around inf
Applied rewrites56.8%
if -3.1999999999999999e36 < xy < 4.5999999999999998e85
Initial program 93.9%
Taylor expanded in yy around inf
*-commutative
N/A
sub-neg
N/A
remove-double-neg
N/A
distribute-neg-in
N/A
+-commutative
N/A
sub-neg
N/A
mul-1-neg
N/A
lower-*.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
54.5
Applied rewrites54.5%
Taylor expanded in xx around 0
Applied rewrites34.7%
if 4.5999999999999998e85 < xy
Initial program 65.2%
Taylor expanded in xy around inf
*-commutative
N/A
lower-*.f64
N/A
cancel-sign-sub-inv
N/A
metadata-eval
N/A
*-lft-identity
N/A
associate-+r-
N/A
lower--.f64
N/A
lower-+.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
unsub-neg
N/A
remove-double-neg
N/A
lower--.f64
52.8
Applied rewrites52.8%
Taylor expanded in yx around 0
Applied rewrites47.7%
(FPCore (yx xx zy xy zx yy) :precision binary64 (if (or (<= xx -1.75e+94) (not (<= xx 1.18e-11))) (* yy xx) (* yx zy)))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((xx <= -1.75e+94) || !(xx <= 1.18e-11)) { tmp = yy * xx; } else { tmp = yx * zy; } return tmp; }
real(8) function code(yx, xx, zy, xy, zx, yy) real(8), intent (in) :: yx real(8), intent (in) :: xx real(8), intent (in) :: zy real(8), intent (in) :: xy real(8), intent (in) :: zx real(8), intent (in) :: yy real(8) :: tmp if ((xx <= (-1.75d+94)) .or. (.not. (xx <= 1.18d-11))) then tmp = yy * xx else tmp = yx * zy end if code = tmp end function
public static double code(double yx, double xx, double zy, double xy, double zx, double yy) { double tmp; if ((xx <= -1.75e+94) || !(xx <= 1.18e-11)) { tmp = yy * xx; } else { tmp = yx * zy; } return tmp; }
def code(yx, xx, zy, xy, zx, yy): tmp = 0 if (xx <= -1.75e+94) or not (xx <= 1.18e-11): tmp = yy * xx else: tmp = yx * zy return tmp
function code(yx, xx, zy, xy, zx, yy) tmp = 0.0 if ((xx <= -1.75e+94) || !(xx <= 1.18e-11)) tmp = Float64(yy * xx); else tmp = Float64(yx * zy); end return tmp end
function tmp_2 = code(yx, xx, zy, xy, zx, yy) tmp = 0.0; if ((xx <= -1.75e+94) || ~((xx <= 1.18e-11))) tmp = yy * xx; else tmp = yx * zy; end tmp_2 = tmp; end
code[yx_, xx_, zy_, xy_, zx_, yy_] := If[Or[LessEqual[xx, -1.75e+94], N[Not[LessEqual[xx, 1.18e-11]], $MachinePrecision]], N[(yy * xx), $MachinePrecision], N[(yx * zy), $MachinePrecision]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;xx \leq -1.75 \cdot 10^{+94} \lor \neg \left(xx \leq 1.18 \cdot 10^{-11}\right):\\ \;\;\;\;yy \cdot xx\\ \mathbf{else}:\\ \;\;\;\;yx \cdot zy\\ \end{array} \end{array}
if xx < -1.7499999999999999e94 or 1.18e-11 < xx
Initial program 66.8%
Taylor expanded in yy around inf
*-commutative
N/A
sub-neg
N/A
remove-double-neg
N/A
distribute-neg-in
N/A
+-commutative
N/A
sub-neg
N/A
mul-1-neg
N/A
lower-*.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
53.7
Applied rewrites53.7%
Taylor expanded in xx around inf
Applied rewrites45.0%
if -1.7499999999999999e94 < xx < 1.18e-11
Initial program 94.6%
Taylor expanded in yx around inf
*-commutative
N/A
lower-*.f64
N/A
lower--.f64
49.6
Applied rewrites49.6%
Taylor expanded in zy around inf
Applied rewrites31.3%
Final simplification37.3%
(FPCore (yx xx zy xy zx yy) :precision binary64 (* yy xx))
double code(double yx, double xx, double zy, double xy, double zx, double yy) { return yy * xx; }
real(8) function code(yx, xx, zy, xy, zx, yy) real(8), intent (in) :: yx real(8), intent (in) :: xx real(8), intent (in) :: zy real(8), intent (in) :: xy real(8), intent (in) :: zx real(8), intent (in) :: yy code = yy * xx end function
public static double code(double yx, double xx, double zy, double xy, double zx, double yy) { return yy * xx; }
def code(yx, xx, zy, xy, zx, yy): return yy * xx
function code(yx, xx, zy, xy, zx, yy) return Float64(yy * xx) end
function tmp = code(yx, xx, zy, xy, zx, yy) tmp = yy * xx; end
code[yx_, xx_, zy_, xy_, zx_, yy_] := N[(yy * xx), $MachinePrecision]
\begin{array}{l} \\ yy \cdot xx \end{array}
Initial program 82.6%
Taylor expanded in yy around inf
*-commutative
N/A
sub-neg
N/A
remove-double-neg
N/A
distribute-neg-in
N/A
+-commutative
N/A
sub-neg
N/A
mul-1-neg
N/A
lower-*.f64
N/A
mul-1-neg
N/A
sub-neg
N/A
+-commutative
N/A
distribute-neg-in
N/A
remove-double-neg
N/A
sub-neg
N/A
lower--.f64
41.9
Applied rewrites41.9%
Taylor expanded in xx around inf
Applied rewrites22.3%
herbie shell --seed 1
(FPCore (yx xx zy xy zx yy)
:name "(yx - xx)*(zy - xy) - (zx - xx)*(yy - xy)"
:precision binary64
:pre (and (and (and (and (and (and (<= -1.79e+308 yx) (<= yx 1.79e+308)) (and (<= -1.79e+308 xx) (<= xx 1.79e+308))) (and (<= -1.79e+308 zy) (<= zy 1.79e+308))) (and (<= -1.79e+308 xy) (<= xy 1.79e+308))) (and (<= -1.79e+308 zx) (<= zx 1.79e+308))) (and (<= -1.79e+308 yy) (<= yy 1.79e+308)))
(- (* (- yx xx) (- zy xy)) (* (- zx xx) (- yy xy))))