clenshaw-final-real

Percentage Accurate: 89.2% → 91.5%
Time: 1.8min
Alternatives: 6
Speedup: 0.2×

Specification

?
\[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
(FPCore (sin_arg_r cosh_arg_i cos_arg_r sinh_arg_i hr hi)
  :precision binary64
  :pre TRUE
  (- (* (* sin_arg_r cosh_arg_i) hr) (* (* cos_arg_r sinh_arg_i) hi)))
double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	return ((sin_arg_r * cosh_arg_i) * hr) - ((cos_arg_r * sinh_arg_i) * hi);
}
real(8) function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
use fmin_fmax_functions
    real(8), intent (in) :: sin_arg_r
    real(8), intent (in) :: cosh_arg_i
    real(8), intent (in) :: cos_arg_r
    real(8), intent (in) :: sinh_arg_i
    real(8), intent (in) :: hr
    real(8), intent (in) :: hi
    code = ((sin_arg_r * cosh_arg_i) * hr) - ((cos_arg_r * sinh_arg_i) * hi)
end function
public static double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	return ((sin_arg_r * cosh_arg_i) * hr) - ((cos_arg_r * sinh_arg_i) * hi);
}
def code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	return ((sin_arg_r * cosh_arg_i) * hr) - ((cos_arg_r * sinh_arg_i) * hi)
function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	return Float64(Float64(Float64(sin_arg_r * cosh_arg_i) * hr) - Float64(Float64(cos_arg_r * sinh_arg_i) * hi))
end
function tmp = code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	tmp = ((sin_arg_r * cosh_arg_i) * hr) - ((cos_arg_r * sinh_arg_i) * hi);
end
code[sin$95$arg$95$r_, cosh$95$arg$95$i_, cos$95$arg$95$r_, sinh$95$arg$95$i_, hr_, hi_] := N[(N[(N[(sin$95$arg$95$r * cosh$95$arg$95$i), $MachinePrecision] * hr), $MachinePrecision] - N[(N[(cos$95$arg$95$r * sinh$95$arg$95$i), $MachinePrecision] * hi), $MachinePrecision]), $MachinePrecision]
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	sin_arg_r in [-inf, +inf],
	cosh_arg_i in [-inf, +inf],
	cos_arg_r in [-inf, +inf],
	sinh_arg_i in [-inf, +inf],
	hr in [-inf, +inf],
	hi in [-inf, +inf]
code: THEORY
BEGIN
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi: real): real =
	((sin_arg_r * cosh_arg_i) * hr) - ((cos_arg_r * sinh_arg_i) * hi)
END code
\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi

Local Percentage Accuracy vs ?

The average percentage accuracy by input value. Horizontal axis shows value of an input variable; the variable is choosen in the title. Vertical axis is accuracy; higher is better. Red represent the original program, while blue represents Herbie's suggestion. These can be toggled with buttons below the plot. The line is an average while dots represent individual samples.

Accuracy vs Speed?

Herbie found 6 alternatives:

AlternativeAccuracySpeedup
The accuracy (vertical axis) and speed (horizontal axis) of each alternatives. Up and to the right is better. The red square shows the initial program, and each blue circle shows an alternative.The line shows the best available speed-accuracy tradeoffs.

Initial Program: 89.2% accurate, 1.0× speedup?

\[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
(FPCore (sin_arg_r cosh_arg_i cos_arg_r sinh_arg_i hr hi)
  :precision binary64
  :pre TRUE
  (- (* (* sin_arg_r cosh_arg_i) hr) (* (* cos_arg_r sinh_arg_i) hi)))
double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	return ((sin_arg_r * cosh_arg_i) * hr) - ((cos_arg_r * sinh_arg_i) * hi);
}
real(8) function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
use fmin_fmax_functions
    real(8), intent (in) :: sin_arg_r
    real(8), intent (in) :: cosh_arg_i
    real(8), intent (in) :: cos_arg_r
    real(8), intent (in) :: sinh_arg_i
    real(8), intent (in) :: hr
    real(8), intent (in) :: hi
    code = ((sin_arg_r * cosh_arg_i) * hr) - ((cos_arg_r * sinh_arg_i) * hi)
end function
public static double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	return ((sin_arg_r * cosh_arg_i) * hr) - ((cos_arg_r * sinh_arg_i) * hi);
}
def code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	return ((sin_arg_r * cosh_arg_i) * hr) - ((cos_arg_r * sinh_arg_i) * hi)
function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	return Float64(Float64(Float64(sin_arg_r * cosh_arg_i) * hr) - Float64(Float64(cos_arg_r * sinh_arg_i) * hi))
end
function tmp = code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	tmp = ((sin_arg_r * cosh_arg_i) * hr) - ((cos_arg_r * sinh_arg_i) * hi);
end
code[sin$95$arg$95$r_, cosh$95$arg$95$i_, cos$95$arg$95$r_, sinh$95$arg$95$i_, hr_, hi_] := N[(N[(N[(sin$95$arg$95$r * cosh$95$arg$95$i), $MachinePrecision] * hr), $MachinePrecision] - N[(N[(cos$95$arg$95$r * sinh$95$arg$95$i), $MachinePrecision] * hi), $MachinePrecision]), $MachinePrecision]
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	sin_arg_r in [-inf, +inf],
	cosh_arg_i in [-inf, +inf],
	cos_arg_r in [-inf, +inf],
	sinh_arg_i in [-inf, +inf],
	hr in [-inf, +inf],
	hi in [-inf, +inf]
code: THEORY
BEGIN
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi: real): real =
	((sin_arg_r * cosh_arg_i) * hr) - ((cos_arg_r * sinh_arg_i) * hi)
END code
\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi

Alternative 1: 91.5% accurate, 0.2× speedup?

\[\begin{array}{l} t_0 := \mathsf{min}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\\ t_1 := \mathsf{min}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\ t_2 := \mathsf{max}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\ t_3 := \mathsf{max}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_2\right)\\ t_4 := \mathsf{max}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\\ t_5 := \mathsf{max}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_4\right)\\ t_6 := \mathsf{min}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_4\right)\\ t_7 := \mathsf{min}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_2\right)\\ \mathbf{if}\;t\_6 \leq -2.2756363847776133 \cdot 10^{-289}:\\ \;\;\;\;\left(t\_6 \cdot t\_5\right) \cdot t\_0 - \left(t\_1 \cdot t\_7\right) \cdot t\_3\\ \mathbf{else}:\\ \;\;\;\;\left(t\_0 \cdot t\_6\right) \cdot t\_5 - \left(t\_1 \cdot t\_3\right) \cdot t\_7\\ \end{array} \]
(FPCore (sin_arg_r cosh_arg_i cos_arg_r sinh_arg_i hr hi)
  :precision binary64
  :pre TRUE
  (let* ((t_0 (fmin (fmin sin_arg_r cosh_arg_i) hr))
       (t_1 (fmin (fmin cos_arg_r sinh_arg_i) hi))
       (t_2 (fmax (fmin cos_arg_r sinh_arg_i) hi))
       (t_3 (fmax (fmax cos_arg_r sinh_arg_i) t_2))
       (t_4 (fmax (fmin sin_arg_r cosh_arg_i) hr))
       (t_5 (fmax (fmax sin_arg_r cosh_arg_i) t_4))
       (t_6 (fmin (fmax sin_arg_r cosh_arg_i) t_4))
       (t_7 (fmin (fmax cos_arg_r sinh_arg_i) t_2)))
  (if (<= t_6 -2.2756363847776133e-289)
    (- (* (* t_6 t_5) t_0) (* (* t_1 t_7) t_3))
    (- (* (* t_0 t_6) t_5) (* (* t_1 t_3) t_7)))))
double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	double t_0 = fmin(fmin(sin_arg_r, cosh_arg_i), hr);
	double t_1 = fmin(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_2 = fmax(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_3 = fmax(fmax(cos_arg_r, sinh_arg_i), t_2);
	double t_4 = fmax(fmin(sin_arg_r, cosh_arg_i), hr);
	double t_5 = fmax(fmax(sin_arg_r, cosh_arg_i), t_4);
	double t_6 = fmin(fmax(sin_arg_r, cosh_arg_i), t_4);
	double t_7 = fmin(fmax(cos_arg_r, sinh_arg_i), t_2);
	double tmp;
	if (t_6 <= -2.2756363847776133e-289) {
		tmp = ((t_6 * t_5) * t_0) - ((t_1 * t_7) * t_3);
	} else {
		tmp = ((t_0 * t_6) * t_5) - ((t_1 * t_3) * t_7);
	}
	return tmp;
}
real(8) function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
use fmin_fmax_functions
    real(8), intent (in) :: sin_arg_r
    real(8), intent (in) :: cosh_arg_i
    real(8), intent (in) :: cos_arg_r
    real(8), intent (in) :: sinh_arg_i
    real(8), intent (in) :: hr
    real(8), intent (in) :: hi
    real(8) :: t_0
    real(8) :: t_1
    real(8) :: t_2
    real(8) :: t_3
    real(8) :: t_4
    real(8) :: t_5
    real(8) :: t_6
    real(8) :: t_7
    real(8) :: tmp
    t_0 = fmin(fmin(sin_arg_r, cosh_arg_i), hr)
    t_1 = fmin(fmin(cos_arg_r, sinh_arg_i), hi)
    t_2 = fmax(fmin(cos_arg_r, sinh_arg_i), hi)
    t_3 = fmax(fmax(cos_arg_r, sinh_arg_i), t_2)
    t_4 = fmax(fmin(sin_arg_r, cosh_arg_i), hr)
    t_5 = fmax(fmax(sin_arg_r, cosh_arg_i), t_4)
    t_6 = fmin(fmax(sin_arg_r, cosh_arg_i), t_4)
    t_7 = fmin(fmax(cos_arg_r, sinh_arg_i), t_2)
    if (t_6 <= (-2.2756363847776133d-289)) then
        tmp = ((t_6 * t_5) * t_0) - ((t_1 * t_7) * t_3)
    else
        tmp = ((t_0 * t_6) * t_5) - ((t_1 * t_3) * t_7)
    end if
    code = tmp
end function
public static double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	double t_0 = fmin(fmin(sin_arg_r, cosh_arg_i), hr);
	double t_1 = fmin(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_2 = fmax(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_3 = fmax(fmax(cos_arg_r, sinh_arg_i), t_2);
	double t_4 = fmax(fmin(sin_arg_r, cosh_arg_i), hr);
	double t_5 = fmax(fmax(sin_arg_r, cosh_arg_i), t_4);
	double t_6 = fmin(fmax(sin_arg_r, cosh_arg_i), t_4);
	double t_7 = fmin(fmax(cos_arg_r, sinh_arg_i), t_2);
	double tmp;
	if (t_6 <= -2.2756363847776133e-289) {
		tmp = ((t_6 * t_5) * t_0) - ((t_1 * t_7) * t_3);
	} else {
		tmp = ((t_0 * t_6) * t_5) - ((t_1 * t_3) * t_7);
	}
	return tmp;
}
def code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	t_0 = fmin(fmin(sin_arg_r, cosh_arg_i), hr)
	t_1 = fmin(fmin(cos_arg_r, sinh_arg_i), hi)
	t_2 = fmax(fmin(cos_arg_r, sinh_arg_i), hi)
	t_3 = fmax(fmax(cos_arg_r, sinh_arg_i), t_2)
	t_4 = fmax(fmin(sin_arg_r, cosh_arg_i), hr)
	t_5 = fmax(fmax(sin_arg_r, cosh_arg_i), t_4)
	t_6 = fmin(fmax(sin_arg_r, cosh_arg_i), t_4)
	t_7 = fmin(fmax(cos_arg_r, sinh_arg_i), t_2)
	tmp = 0
	if t_6 <= -2.2756363847776133e-289:
		tmp = ((t_6 * t_5) * t_0) - ((t_1 * t_7) * t_3)
	else:
		tmp = ((t_0 * t_6) * t_5) - ((t_1 * t_3) * t_7)
	return tmp
function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	t_0 = fmin(fmin(sin_arg_r, cosh_arg_i), hr)
	t_1 = fmin(fmin(cos_arg_r, sinh_arg_i), hi)
	t_2 = fmax(fmin(cos_arg_r, sinh_arg_i), hi)
	t_3 = fmax(fmax(cos_arg_r, sinh_arg_i), t_2)
	t_4 = fmax(fmin(sin_arg_r, cosh_arg_i), hr)
	t_5 = fmax(fmax(sin_arg_r, cosh_arg_i), t_4)
	t_6 = fmin(fmax(sin_arg_r, cosh_arg_i), t_4)
	t_7 = fmin(fmax(cos_arg_r, sinh_arg_i), t_2)
	tmp = 0.0
	if (t_6 <= -2.2756363847776133e-289)
		tmp = Float64(Float64(Float64(t_6 * t_5) * t_0) - Float64(Float64(t_1 * t_7) * t_3));
	else
		tmp = Float64(Float64(Float64(t_0 * t_6) * t_5) - Float64(Float64(t_1 * t_3) * t_7));
	end
	return tmp
end
function tmp_2 = code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	t_0 = min(min(sin_arg_r, cosh_arg_i), hr);
	t_1 = min(min(cos_arg_r, sinh_arg_i), hi);
	t_2 = max(min(cos_arg_r, sinh_arg_i), hi);
	t_3 = max(max(cos_arg_r, sinh_arg_i), t_2);
	t_4 = max(min(sin_arg_r, cosh_arg_i), hr);
	t_5 = max(max(sin_arg_r, cosh_arg_i), t_4);
	t_6 = min(max(sin_arg_r, cosh_arg_i), t_4);
	t_7 = min(max(cos_arg_r, sinh_arg_i), t_2);
	tmp = 0.0;
	if (t_6 <= -2.2756363847776133e-289)
		tmp = ((t_6 * t_5) * t_0) - ((t_1 * t_7) * t_3);
	else
		tmp = ((t_0 * t_6) * t_5) - ((t_1 * t_3) * t_7);
	end
	tmp_2 = tmp;
end
code[sin$95$arg$95$r_, cosh$95$arg$95$i_, cos$95$arg$95$r_, sinh$95$arg$95$i_, hr_, hi_] := Block[{t$95$0 = N[Min[N[Min[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], hr], $MachinePrecision]}, Block[{t$95$1 = N[Min[N[Min[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], hi], $MachinePrecision]}, Block[{t$95$2 = N[Max[N[Min[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], hi], $MachinePrecision]}, Block[{t$95$3 = N[Max[N[Max[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], t$95$2], $MachinePrecision]}, Block[{t$95$4 = N[Max[N[Min[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], hr], $MachinePrecision]}, Block[{t$95$5 = N[Max[N[Max[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], t$95$4], $MachinePrecision]}, Block[{t$95$6 = N[Min[N[Max[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], t$95$4], $MachinePrecision]}, Block[{t$95$7 = N[Min[N[Max[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], t$95$2], $MachinePrecision]}, If[LessEqual[t$95$6, -2.2756363847776133e-289], N[(N[(N[(t$95$6 * t$95$5), $MachinePrecision] * t$95$0), $MachinePrecision] - N[(N[(t$95$1 * t$95$7), $MachinePrecision] * t$95$3), $MachinePrecision]), $MachinePrecision], N[(N[(N[(t$95$0 * t$95$6), $MachinePrecision] * t$95$5), $MachinePrecision] - N[(N[(t$95$1 * t$95$3), $MachinePrecision] * t$95$7), $MachinePrecision]), $MachinePrecision]]]]]]]]]]
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	sin_arg_r in [-inf, +inf],
	cosh_arg_i in [-inf, +inf],
	cos_arg_r in [-inf, +inf],
	sinh_arg_i in [-inf, +inf],
	hr in [-inf, +inf],
	hi in [-inf, +inf]
code: THEORY
BEGIN
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi: real): real =
	LET tmp_2 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
	LET tmp_3 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
	LET tmp_1 = IF (tmp_2 < hr) THEN tmp_3 ELSE hr ENDIF IN
	LET t_0 = tmp_1 IN
		LET tmp_6 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
		LET tmp_7 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
		LET tmp_5 = IF (tmp_6 < hi) THEN tmp_7 ELSE hi ENDIF IN
		LET t_1 = tmp_5 IN
			LET tmp_10 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
			LET tmp_11 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
			LET tmp_9 = IF (tmp_10 > hi) THEN tmp_11 ELSE hi ENDIF IN
			LET t_2 = tmp_9 IN
				LET tmp_14 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
				LET tmp_15 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
				LET tmp_13 = IF (tmp_14 > t_2) THEN tmp_15 ELSE t_2 ENDIF IN
				LET t_3 = tmp_13 IN
					LET tmp_18 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
					LET tmp_19 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
					LET tmp_17 = IF (tmp_18 > hr) THEN tmp_19 ELSE hr ENDIF IN
					LET t_4 = tmp_17 IN
						LET tmp_22 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
						LET tmp_23 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
						LET tmp_21 = IF (tmp_22 > t_4) THEN tmp_23 ELSE t_4 ENDIF IN
						LET t_5 = tmp_21 IN
							LET tmp_26 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
							LET tmp_27 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
							LET tmp_25 = IF (tmp_26 < t_4) THEN tmp_27 ELSE t_4 ENDIF IN
							LET t_6 = tmp_25 IN
								LET tmp_30 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
								LET tmp_31 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
								LET tmp_29 = IF (tmp_30 < t_2) THEN tmp_31 ELSE t_2 ENDIF IN
								LET t_7 = tmp_29 IN
									LET tmp_32 = IF (t_6 <= (-2275636384777613300267885412036930703401337942040182674606968802686119749810185825053674899770431730520634268463260528745197488234924619477595302676535270808087379679289499024926921992928647819628568408731410958635749900503113396073827464651596192451385588379625283079410057361204165955394458349918161553221030819965195263523662973956134035877897121480190680965971655383250134890740093276322637937327050103469767131705600407026599559702541552494659890383136952208823091493982480379104266641378984017562491855862843885740647565033451555627903681092982926567141523576935785206774997093659213561828639675596635128013625950742122992970748672331029445062024420519986431236813490615496224922509327370789833366870880126953125e-1006)) THEN (((t_6 * t_5) * t_0) - ((t_1 * t_7) * t_3)) ELSE (((t_0 * t_6) * t_5) - ((t_1 * t_3) * t_7)) ENDIF IN
	tmp_32
END code
\begin{array}{l}
t_0 := \mathsf{min}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\\
t_1 := \mathsf{min}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\
t_2 := \mathsf{max}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\
t_3 := \mathsf{max}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_2\right)\\
t_4 := \mathsf{max}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\\
t_5 := \mathsf{max}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_4\right)\\
t_6 := \mathsf{min}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_4\right)\\
t_7 := \mathsf{min}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_2\right)\\
\mathbf{if}\;t\_6 \leq -2.2756363847776133 \cdot 10^{-289}:\\
\;\;\;\;\left(t\_6 \cdot t\_5\right) \cdot t\_0 - \left(t\_1 \cdot t\_7\right) \cdot t\_3\\

\mathbf{else}:\\
\;\;\;\;\left(t\_0 \cdot t\_6\right) \cdot t\_5 - \left(t\_1 \cdot t\_3\right) \cdot t\_7\\


\end{array}
Derivation
  1. Split input into 2 regimes
  2. if cosh_arg_i < -2.2756363847776133e-289

    1. Initial program 89.2%

      \[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
    2. Applied rewrites88.9%

      \[\leadsto \left(cosh\_arg\_i \cdot hr\right) \cdot sin\_arg\_r - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]

    if -2.2756363847776133e-289 < cosh_arg_i

    1. Initial program 89.2%

      \[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
    2. Applied rewrites89.3%

      \[\leadsto \left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot hi\right) \cdot sinh\_arg\_i \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 2: 91.0% accurate, 0.2× speedup?

\[\begin{array}{l} t_0 := \mathsf{max}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\\ t_1 := \mathsf{min}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_0\right)\\ t_2 := \mathsf{max}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_0\right)\\ t_3 := \mathsf{min}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\\ t_4 := \mathsf{max}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\ t_5 := \mathsf{min}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_4\right)\\ t_6 := \mathsf{min}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\ t_7 := \mathsf{max}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_4\right)\\ \mathbf{if}\;t\_5 \leq -7.407848189653658 \cdot 10^{-199}:\\ \;\;\;\;t\_1 \cdot \left(t\_2 \cdot t\_3\right) - t\_6 \cdot \left(t\_7 \cdot t\_5\right)\\ \mathbf{else}:\\ \;\;\;\;\left(t\_1 \cdot t\_2\right) \cdot t\_3 - \left(t\_6 \cdot t\_5\right) \cdot t\_7\\ \end{array} \]
(FPCore (sin_arg_r cosh_arg_i cos_arg_r sinh_arg_i hr hi)
  :precision binary64
  :pre TRUE
  (let* ((t_0 (fmax (fmin sin_arg_r cosh_arg_i) hr))
       (t_1 (fmin (fmax sin_arg_r cosh_arg_i) t_0))
       (t_2 (fmax (fmax sin_arg_r cosh_arg_i) t_0))
       (t_3 (fmin (fmin sin_arg_r cosh_arg_i) hr))
       (t_4 (fmax (fmin cos_arg_r sinh_arg_i) hi))
       (t_5 (fmin (fmax cos_arg_r sinh_arg_i) t_4))
       (t_6 (fmin (fmin cos_arg_r sinh_arg_i) hi))
       (t_7 (fmax (fmax cos_arg_r sinh_arg_i) t_4)))
  (if (<= t_5 -7.407848189653658e-199)
    (- (* t_1 (* t_2 t_3)) (* t_6 (* t_7 t_5)))
    (- (* (* t_1 t_2) t_3) (* (* t_6 t_5) t_7)))))
double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	double t_0 = fmax(fmin(sin_arg_r, cosh_arg_i), hr);
	double t_1 = fmin(fmax(sin_arg_r, cosh_arg_i), t_0);
	double t_2 = fmax(fmax(sin_arg_r, cosh_arg_i), t_0);
	double t_3 = fmin(fmin(sin_arg_r, cosh_arg_i), hr);
	double t_4 = fmax(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_5 = fmin(fmax(cos_arg_r, sinh_arg_i), t_4);
	double t_6 = fmin(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_7 = fmax(fmax(cos_arg_r, sinh_arg_i), t_4);
	double tmp;
	if (t_5 <= -7.407848189653658e-199) {
		tmp = (t_1 * (t_2 * t_3)) - (t_6 * (t_7 * t_5));
	} else {
		tmp = ((t_1 * t_2) * t_3) - ((t_6 * t_5) * t_7);
	}
	return tmp;
}
real(8) function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
use fmin_fmax_functions
    real(8), intent (in) :: sin_arg_r
    real(8), intent (in) :: cosh_arg_i
    real(8), intent (in) :: cos_arg_r
    real(8), intent (in) :: sinh_arg_i
    real(8), intent (in) :: hr
    real(8), intent (in) :: hi
    real(8) :: t_0
    real(8) :: t_1
    real(8) :: t_2
    real(8) :: t_3
    real(8) :: t_4
    real(8) :: t_5
    real(8) :: t_6
    real(8) :: t_7
    real(8) :: tmp
    t_0 = fmax(fmin(sin_arg_r, cosh_arg_i), hr)
    t_1 = fmin(fmax(sin_arg_r, cosh_arg_i), t_0)
    t_2 = fmax(fmax(sin_arg_r, cosh_arg_i), t_0)
    t_3 = fmin(fmin(sin_arg_r, cosh_arg_i), hr)
    t_4 = fmax(fmin(cos_arg_r, sinh_arg_i), hi)
    t_5 = fmin(fmax(cos_arg_r, sinh_arg_i), t_4)
    t_6 = fmin(fmin(cos_arg_r, sinh_arg_i), hi)
    t_7 = fmax(fmax(cos_arg_r, sinh_arg_i), t_4)
    if (t_5 <= (-7.407848189653658d-199)) then
        tmp = (t_1 * (t_2 * t_3)) - (t_6 * (t_7 * t_5))
    else
        tmp = ((t_1 * t_2) * t_3) - ((t_6 * t_5) * t_7)
    end if
    code = tmp
end function
public static double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	double t_0 = fmax(fmin(sin_arg_r, cosh_arg_i), hr);
	double t_1 = fmin(fmax(sin_arg_r, cosh_arg_i), t_0);
	double t_2 = fmax(fmax(sin_arg_r, cosh_arg_i), t_0);
	double t_3 = fmin(fmin(sin_arg_r, cosh_arg_i), hr);
	double t_4 = fmax(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_5 = fmin(fmax(cos_arg_r, sinh_arg_i), t_4);
	double t_6 = fmin(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_7 = fmax(fmax(cos_arg_r, sinh_arg_i), t_4);
	double tmp;
	if (t_5 <= -7.407848189653658e-199) {
		tmp = (t_1 * (t_2 * t_3)) - (t_6 * (t_7 * t_5));
	} else {
		tmp = ((t_1 * t_2) * t_3) - ((t_6 * t_5) * t_7);
	}
	return tmp;
}
def code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	t_0 = fmax(fmin(sin_arg_r, cosh_arg_i), hr)
	t_1 = fmin(fmax(sin_arg_r, cosh_arg_i), t_0)
	t_2 = fmax(fmax(sin_arg_r, cosh_arg_i), t_0)
	t_3 = fmin(fmin(sin_arg_r, cosh_arg_i), hr)
	t_4 = fmax(fmin(cos_arg_r, sinh_arg_i), hi)
	t_5 = fmin(fmax(cos_arg_r, sinh_arg_i), t_4)
	t_6 = fmin(fmin(cos_arg_r, sinh_arg_i), hi)
	t_7 = fmax(fmax(cos_arg_r, sinh_arg_i), t_4)
	tmp = 0
	if t_5 <= -7.407848189653658e-199:
		tmp = (t_1 * (t_2 * t_3)) - (t_6 * (t_7 * t_5))
	else:
		tmp = ((t_1 * t_2) * t_3) - ((t_6 * t_5) * t_7)
	return tmp
function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	t_0 = fmax(fmin(sin_arg_r, cosh_arg_i), hr)
	t_1 = fmin(fmax(sin_arg_r, cosh_arg_i), t_0)
	t_2 = fmax(fmax(sin_arg_r, cosh_arg_i), t_0)
	t_3 = fmin(fmin(sin_arg_r, cosh_arg_i), hr)
	t_4 = fmax(fmin(cos_arg_r, sinh_arg_i), hi)
	t_5 = fmin(fmax(cos_arg_r, sinh_arg_i), t_4)
	t_6 = fmin(fmin(cos_arg_r, sinh_arg_i), hi)
	t_7 = fmax(fmax(cos_arg_r, sinh_arg_i), t_4)
	tmp = 0.0
	if (t_5 <= -7.407848189653658e-199)
		tmp = Float64(Float64(t_1 * Float64(t_2 * t_3)) - Float64(t_6 * Float64(t_7 * t_5)));
	else
		tmp = Float64(Float64(Float64(t_1 * t_2) * t_3) - Float64(Float64(t_6 * t_5) * t_7));
	end
	return tmp
end
function tmp_2 = code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	t_0 = max(min(sin_arg_r, cosh_arg_i), hr);
	t_1 = min(max(sin_arg_r, cosh_arg_i), t_0);
	t_2 = max(max(sin_arg_r, cosh_arg_i), t_0);
	t_3 = min(min(sin_arg_r, cosh_arg_i), hr);
	t_4 = max(min(cos_arg_r, sinh_arg_i), hi);
	t_5 = min(max(cos_arg_r, sinh_arg_i), t_4);
	t_6 = min(min(cos_arg_r, sinh_arg_i), hi);
	t_7 = max(max(cos_arg_r, sinh_arg_i), t_4);
	tmp = 0.0;
	if (t_5 <= -7.407848189653658e-199)
		tmp = (t_1 * (t_2 * t_3)) - (t_6 * (t_7 * t_5));
	else
		tmp = ((t_1 * t_2) * t_3) - ((t_6 * t_5) * t_7);
	end
	tmp_2 = tmp;
end
code[sin$95$arg$95$r_, cosh$95$arg$95$i_, cos$95$arg$95$r_, sinh$95$arg$95$i_, hr_, hi_] := Block[{t$95$0 = N[Max[N[Min[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], hr], $MachinePrecision]}, Block[{t$95$1 = N[Min[N[Max[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], t$95$0], $MachinePrecision]}, Block[{t$95$2 = N[Max[N[Max[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], t$95$0], $MachinePrecision]}, Block[{t$95$3 = N[Min[N[Min[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], hr], $MachinePrecision]}, Block[{t$95$4 = N[Max[N[Min[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], hi], $MachinePrecision]}, Block[{t$95$5 = N[Min[N[Max[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], t$95$4], $MachinePrecision]}, Block[{t$95$6 = N[Min[N[Min[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], hi], $MachinePrecision]}, Block[{t$95$7 = N[Max[N[Max[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], t$95$4], $MachinePrecision]}, If[LessEqual[t$95$5, -7.407848189653658e-199], N[(N[(t$95$1 * N[(t$95$2 * t$95$3), $MachinePrecision]), $MachinePrecision] - N[(t$95$6 * N[(t$95$7 * t$95$5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(t$95$1 * t$95$2), $MachinePrecision] * t$95$3), $MachinePrecision] - N[(N[(t$95$6 * t$95$5), $MachinePrecision] * t$95$7), $MachinePrecision]), $MachinePrecision]]]]]]]]]]
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	sin_arg_r in [-inf, +inf],
	cosh_arg_i in [-inf, +inf],
	cos_arg_r in [-inf, +inf],
	sinh_arg_i in [-inf, +inf],
	hr in [-inf, +inf],
	hi in [-inf, +inf]
code: THEORY
BEGIN
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi: real): real =
	LET tmp_2 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
	LET tmp_3 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
	LET tmp_1 = IF (tmp_2 > hr) THEN tmp_3 ELSE hr ENDIF IN
	LET t_0 = tmp_1 IN
		LET tmp_6 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
		LET tmp_7 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
		LET tmp_5 = IF (tmp_6 < t_0) THEN tmp_7 ELSE t_0 ENDIF IN
		LET t_1 = tmp_5 IN
			LET tmp_10 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
			LET tmp_11 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
			LET tmp_9 = IF (tmp_10 > t_0) THEN tmp_11 ELSE t_0 ENDIF IN
			LET t_2 = tmp_9 IN
				LET tmp_14 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
				LET tmp_15 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
				LET tmp_13 = IF (tmp_14 < hr) THEN tmp_15 ELSE hr ENDIF IN
				LET t_3 = tmp_13 IN
					LET tmp_18 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
					LET tmp_19 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
					LET tmp_17 = IF (tmp_18 > hi) THEN tmp_19 ELSE hi ENDIF IN
					LET t_4 = tmp_17 IN
						LET tmp_22 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
						LET tmp_23 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
						LET tmp_21 = IF (tmp_22 < t_4) THEN tmp_23 ELSE t_4 ENDIF IN
						LET t_5 = tmp_21 IN
							LET tmp_26 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
							LET tmp_27 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
							LET tmp_25 = IF (tmp_26 < hi) THEN tmp_27 ELSE hi ENDIF IN
							LET t_6 = tmp_25 IN
								LET tmp_30 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
								LET tmp_31 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
								LET tmp_29 = IF (tmp_30 > t_4) THEN tmp_31 ELSE t_4 ENDIF IN
								LET t_7 = tmp_29 IN
									LET tmp_32 = IF (t_5 <= (-740784818965365765911858826829069812288289277873723207735858521050398154043643425998453466031749708597155037762440119118046423020467122172355717822544738143828949143115981279441980850453306456789804871673524455132085866745698000298272982494926891685156424537336742806472641406778553985623973803157256259194746608009714157931180490139079700220949984716940716510240790811472739305877307246274721476618558372104971118378738440757304898673339913190713839353759274712177114127244215158185625114128924906253814697265625e-711)) THEN ((t_1 * (t_2 * t_3)) - (t_6 * (t_7 * t_5))) ELSE (((t_1 * t_2) * t_3) - ((t_6 * t_5) * t_7)) ENDIF IN
	tmp_32
END code
\begin{array}{l}
t_0 := \mathsf{max}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\\
t_1 := \mathsf{min}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_0\right)\\
t_2 := \mathsf{max}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_0\right)\\
t_3 := \mathsf{min}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\\
t_4 := \mathsf{max}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\
t_5 := \mathsf{min}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_4\right)\\
t_6 := \mathsf{min}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\
t_7 := \mathsf{max}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_4\right)\\
\mathbf{if}\;t\_5 \leq -7.407848189653658 \cdot 10^{-199}:\\
\;\;\;\;t\_1 \cdot \left(t\_2 \cdot t\_3\right) - t\_6 \cdot \left(t\_7 \cdot t\_5\right)\\

\mathbf{else}:\\
\;\;\;\;\left(t\_1 \cdot t\_2\right) \cdot t\_3 - \left(t\_6 \cdot t\_5\right) \cdot t\_7\\


\end{array}
Derivation
  1. Split input into 2 regimes
  2. if sinh_arg_i < -7.4078481896536577e-199

    1. Initial program 89.2%

      \[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
    2. Taylor expanded in sin_arg_r around 0

      \[\leadsto cosh\_arg\_i \cdot \left(hr \cdot sin\_arg\_r\right) - cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right) \]
    3. Applied rewrites88.8%

      \[\leadsto cosh\_arg\_i \cdot \left(hr \cdot sin\_arg\_r\right) - cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right) \]

    if -7.4078481896536577e-199 < sinh_arg_i

    1. Initial program 89.2%

      \[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
    2. Applied rewrites88.9%

      \[\leadsto \left(cosh\_arg\_i \cdot hr\right) \cdot sin\_arg\_r - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 3: 90.4% accurate, 0.2× speedup?

\[\begin{array}{l} t_0 := \mathsf{min}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\ t_1 := \mathsf{max}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\ t_2 := \mathsf{min}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_1\right)\\ t_3 := \mathsf{max}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_1\right)\\ \mathbf{if}\;t\_2 \leq 1.371382541618482 \cdot 10^{+89}:\\ \;\;\;\;\mathsf{min}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right) \cdot \left(\mathsf{max}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right) \cdot \mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right)\right) - t\_0 \cdot \left(t\_3 \cdot t\_2\right)\\ \mathbf{else}:\\ \;\;\;\;\left(t\_0 \cdot t\_2\right) \cdot \left(-t\_3\right)\\ \end{array} \]
(FPCore (sin_arg_r cosh_arg_i cos_arg_r sinh_arg_i hr hi)
  :precision binary64
  :pre TRUE
  (let* ((t_0 (fmin (fmin cos_arg_r sinh_arg_i) hi))
       (t_1 (fmax (fmin cos_arg_r sinh_arg_i) hi))
       (t_2 (fmin (fmax cos_arg_r sinh_arg_i) t_1))
       (t_3 (fmax (fmax cos_arg_r sinh_arg_i) t_1)))
  (if (<= t_2 1.371382541618482e+89)
    (-
     (*
      (fmin (fmax sin_arg_r cosh_arg_i) hr)
      (*
       (fmax (fmax sin_arg_r cosh_arg_i) hr)
       (fmin sin_arg_r cosh_arg_i)))
     (* t_0 (* t_3 t_2)))
    (* (* t_0 t_2) (- t_3)))))
double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	double t_0 = fmin(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_1 = fmax(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_2 = fmin(fmax(cos_arg_r, sinh_arg_i), t_1);
	double t_3 = fmax(fmax(cos_arg_r, sinh_arg_i), t_1);
	double tmp;
	if (t_2 <= 1.371382541618482e+89) {
		tmp = (fmin(fmax(sin_arg_r, cosh_arg_i), hr) * (fmax(fmax(sin_arg_r, cosh_arg_i), hr) * fmin(sin_arg_r, cosh_arg_i))) - (t_0 * (t_3 * t_2));
	} else {
		tmp = (t_0 * t_2) * -t_3;
	}
	return tmp;
}
real(8) function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
use fmin_fmax_functions
    real(8), intent (in) :: sin_arg_r
    real(8), intent (in) :: cosh_arg_i
    real(8), intent (in) :: cos_arg_r
    real(8), intent (in) :: sinh_arg_i
    real(8), intent (in) :: hr
    real(8), intent (in) :: hi
    real(8) :: t_0
    real(8) :: t_1
    real(8) :: t_2
    real(8) :: t_3
    real(8) :: tmp
    t_0 = fmin(fmin(cos_arg_r, sinh_arg_i), hi)
    t_1 = fmax(fmin(cos_arg_r, sinh_arg_i), hi)
    t_2 = fmin(fmax(cos_arg_r, sinh_arg_i), t_1)
    t_3 = fmax(fmax(cos_arg_r, sinh_arg_i), t_1)
    if (t_2 <= 1.371382541618482d+89) then
        tmp = (fmin(fmax(sin_arg_r, cosh_arg_i), hr) * (fmax(fmax(sin_arg_r, cosh_arg_i), hr) * fmin(sin_arg_r, cosh_arg_i))) - (t_0 * (t_3 * t_2))
    else
        tmp = (t_0 * t_2) * -t_3
    end if
    code = tmp
end function
public static double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	double t_0 = fmin(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_1 = fmax(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_2 = fmin(fmax(cos_arg_r, sinh_arg_i), t_1);
	double t_3 = fmax(fmax(cos_arg_r, sinh_arg_i), t_1);
	double tmp;
	if (t_2 <= 1.371382541618482e+89) {
		tmp = (fmin(fmax(sin_arg_r, cosh_arg_i), hr) * (fmax(fmax(sin_arg_r, cosh_arg_i), hr) * fmin(sin_arg_r, cosh_arg_i))) - (t_0 * (t_3 * t_2));
	} else {
		tmp = (t_0 * t_2) * -t_3;
	}
	return tmp;
}
def code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	t_0 = fmin(fmin(cos_arg_r, sinh_arg_i), hi)
	t_1 = fmax(fmin(cos_arg_r, sinh_arg_i), hi)
	t_2 = fmin(fmax(cos_arg_r, sinh_arg_i), t_1)
	t_3 = fmax(fmax(cos_arg_r, sinh_arg_i), t_1)
	tmp = 0
	if t_2 <= 1.371382541618482e+89:
		tmp = (fmin(fmax(sin_arg_r, cosh_arg_i), hr) * (fmax(fmax(sin_arg_r, cosh_arg_i), hr) * fmin(sin_arg_r, cosh_arg_i))) - (t_0 * (t_3 * t_2))
	else:
		tmp = (t_0 * t_2) * -t_3
	return tmp
function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	t_0 = fmin(fmin(cos_arg_r, sinh_arg_i), hi)
	t_1 = fmax(fmin(cos_arg_r, sinh_arg_i), hi)
	t_2 = fmin(fmax(cos_arg_r, sinh_arg_i), t_1)
	t_3 = fmax(fmax(cos_arg_r, sinh_arg_i), t_1)
	tmp = 0.0
	if (t_2 <= 1.371382541618482e+89)
		tmp = Float64(Float64(fmin(fmax(sin_arg_r, cosh_arg_i), hr) * Float64(fmax(fmax(sin_arg_r, cosh_arg_i), hr) * fmin(sin_arg_r, cosh_arg_i))) - Float64(t_0 * Float64(t_3 * t_2)));
	else
		tmp = Float64(Float64(t_0 * t_2) * Float64(-t_3));
	end
	return tmp
end
function tmp_2 = code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	t_0 = min(min(cos_arg_r, sinh_arg_i), hi);
	t_1 = max(min(cos_arg_r, sinh_arg_i), hi);
	t_2 = min(max(cos_arg_r, sinh_arg_i), t_1);
	t_3 = max(max(cos_arg_r, sinh_arg_i), t_1);
	tmp = 0.0;
	if (t_2 <= 1.371382541618482e+89)
		tmp = (min(max(sin_arg_r, cosh_arg_i), hr) * (max(max(sin_arg_r, cosh_arg_i), hr) * min(sin_arg_r, cosh_arg_i))) - (t_0 * (t_3 * t_2));
	else
		tmp = (t_0 * t_2) * -t_3;
	end
	tmp_2 = tmp;
end
code[sin$95$arg$95$r_, cosh$95$arg$95$i_, cos$95$arg$95$r_, sinh$95$arg$95$i_, hr_, hi_] := Block[{t$95$0 = N[Min[N[Min[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], hi], $MachinePrecision]}, Block[{t$95$1 = N[Max[N[Min[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], hi], $MachinePrecision]}, Block[{t$95$2 = N[Min[N[Max[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], t$95$1], $MachinePrecision]}, Block[{t$95$3 = N[Max[N[Max[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], t$95$1], $MachinePrecision]}, If[LessEqual[t$95$2, 1.371382541618482e+89], N[(N[(N[Min[N[Max[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], hr], $MachinePrecision] * N[(N[Max[N[Max[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], hr], $MachinePrecision] * N[Min[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(t$95$0 * N[(t$95$3 * t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(t$95$0 * t$95$2), $MachinePrecision] * (-t$95$3)), $MachinePrecision]]]]]]
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	sin_arg_r in [-inf, +inf],
	cosh_arg_i in [-inf, +inf],
	cos_arg_r in [-inf, +inf],
	sinh_arg_i in [-inf, +inf],
	hr in [-inf, +inf],
	hi in [-inf, +inf]
code: THEORY
BEGIN
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi: real): real =
	LET tmp_2 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
	LET tmp_3 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
	LET tmp_1 = IF (tmp_2 < hi) THEN tmp_3 ELSE hi ENDIF IN
	LET t_0 = tmp_1 IN
		LET tmp_6 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
		LET tmp_7 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
		LET tmp_5 = IF (tmp_6 > hi) THEN tmp_7 ELSE hi ENDIF IN
		LET t_1 = tmp_5 IN
			LET tmp_10 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
			LET tmp_11 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
			LET tmp_9 = IF (tmp_10 < t_1) THEN tmp_11 ELSE t_1 ENDIF IN
			LET t_2 = tmp_9 IN
				LET tmp_14 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
				LET tmp_15 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
				LET tmp_13 = IF (tmp_14 > t_1) THEN tmp_15 ELSE t_1 ENDIF IN
				LET t_3 = tmp_13 IN
					LET tmp_28 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
					LET tmp_29 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
					LET tmp_27 = IF (tmp_28 < hr) THEN tmp_29 ELSE hr ENDIF IN
					LET tmp_32 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
					LET tmp_33 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
					LET tmp_31 = IF (tmp_32 > hr) THEN tmp_33 ELSE hr ENDIF IN
					LET tmp_34 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
					LET tmp_25 = IF (t_2 <= (137138254161848199411842180926840264020799850697348766217578284692549098938241569014153216)) THEN ((tmp_27 * (tmp_31 * tmp_34)) - (t_0 * (t_3 * t_2))) ELSE ((t_0 * t_2) * (- t_3)) ENDIF IN
	tmp_25
END code
\begin{array}{l}
t_0 := \mathsf{min}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\
t_1 := \mathsf{max}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\
t_2 := \mathsf{min}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_1\right)\\
t_3 := \mathsf{max}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_1\right)\\
\mathbf{if}\;t\_2 \leq 1.371382541618482 \cdot 10^{+89}:\\
\;\;\;\;\mathsf{min}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right) \cdot \left(\mathsf{max}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right) \cdot \mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right)\right) - t\_0 \cdot \left(t\_3 \cdot t\_2\right)\\

\mathbf{else}:\\
\;\;\;\;\left(t\_0 \cdot t\_2\right) \cdot \left(-t\_3\right)\\


\end{array}
Derivation
  1. Split input into 2 regimes
  2. if sinh_arg_i < 1.371382541618482e89

    1. Initial program 89.2%

      \[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
    2. Taylor expanded in sin_arg_r around 0

      \[\leadsto cosh\_arg\_i \cdot \left(hr \cdot sin\_arg\_r\right) - cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right) \]
    3. Applied rewrites88.8%

      \[\leadsto cosh\_arg\_i \cdot \left(hr \cdot sin\_arg\_r\right) - cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right) \]

    if 1.371382541618482e89 < sinh_arg_i

    1. Initial program 89.2%

      \[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
    2. Taylor expanded in sin_arg_r around 0

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
    3. Applied rewrites48.2%

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
    4. Applied rewrites48.7%

      \[\leadsto \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot \left(-hi\right) \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 4: 70.8% accurate, 0.1× speedup?

\[\begin{array}{l} t_0 := \mathsf{max}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\ t_1 := \mathsf{max}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_0\right)\\ t_2 := \mathsf{min}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\ t_3 := \mathsf{min}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_0\right)\\ t_4 := t\_2 \cdot t\_3\\ t_5 := t\_4 \cdot t\_1\\ t_6 := \mathsf{max}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\\ \mathbf{if}\;t\_5 \leq -4 \cdot 10^{-121}:\\ \;\;\;\;\left(t\_2 \cdot t\_1\right) \cdot \left(-t\_3\right)\\ \mathbf{elif}\;t\_5 \leq 20000000:\\ \;\;\;\;\mathsf{min}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_6\right) \cdot \left(\mathsf{max}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_6\right) \cdot \mathsf{min}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\right)\\ \mathbf{else}:\\ \;\;\;\;t\_4 \cdot \left(-t\_1\right)\\ \end{array} \]
(FPCore (sin_arg_r cosh_arg_i cos_arg_r sinh_arg_i hr hi)
  :precision binary64
  :pre TRUE
  (let* ((t_0 (fmax (fmin cos_arg_r sinh_arg_i) hi))
       (t_1 (fmax (fmax cos_arg_r sinh_arg_i) t_0))
       (t_2 (fmin (fmin cos_arg_r sinh_arg_i) hi))
       (t_3 (fmin (fmax cos_arg_r sinh_arg_i) t_0))
       (t_4 (* t_2 t_3))
       (t_5 (* t_4 t_1))
       (t_6 (fmax (fmin sin_arg_r cosh_arg_i) hr)))
  (if (<= t_5 -4e-121)
    (* (* t_2 t_1) (- t_3))
    (if (<= t_5 20000000.0)
      (*
       (fmin (fmax sin_arg_r cosh_arg_i) t_6)
       (*
        (fmax (fmax sin_arg_r cosh_arg_i) t_6)
        (fmin (fmin sin_arg_r cosh_arg_i) hr)))
      (* t_4 (- t_1))))))
double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	double t_0 = fmax(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_1 = fmax(fmax(cos_arg_r, sinh_arg_i), t_0);
	double t_2 = fmin(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_3 = fmin(fmax(cos_arg_r, sinh_arg_i), t_0);
	double t_4 = t_2 * t_3;
	double t_5 = t_4 * t_1;
	double t_6 = fmax(fmin(sin_arg_r, cosh_arg_i), hr);
	double tmp;
	if (t_5 <= -4e-121) {
		tmp = (t_2 * t_1) * -t_3;
	} else if (t_5 <= 20000000.0) {
		tmp = fmin(fmax(sin_arg_r, cosh_arg_i), t_6) * (fmax(fmax(sin_arg_r, cosh_arg_i), t_6) * fmin(fmin(sin_arg_r, cosh_arg_i), hr));
	} else {
		tmp = t_4 * -t_1;
	}
	return tmp;
}
real(8) function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
use fmin_fmax_functions
    real(8), intent (in) :: sin_arg_r
    real(8), intent (in) :: cosh_arg_i
    real(8), intent (in) :: cos_arg_r
    real(8), intent (in) :: sinh_arg_i
    real(8), intent (in) :: hr
    real(8), intent (in) :: hi
    real(8) :: t_0
    real(8) :: t_1
    real(8) :: t_2
    real(8) :: t_3
    real(8) :: t_4
    real(8) :: t_5
    real(8) :: t_6
    real(8) :: tmp
    t_0 = fmax(fmin(cos_arg_r, sinh_arg_i), hi)
    t_1 = fmax(fmax(cos_arg_r, sinh_arg_i), t_0)
    t_2 = fmin(fmin(cos_arg_r, sinh_arg_i), hi)
    t_3 = fmin(fmax(cos_arg_r, sinh_arg_i), t_0)
    t_4 = t_2 * t_3
    t_5 = t_4 * t_1
    t_6 = fmax(fmin(sin_arg_r, cosh_arg_i), hr)
    if (t_5 <= (-4d-121)) then
        tmp = (t_2 * t_1) * -t_3
    else if (t_5 <= 20000000.0d0) then
        tmp = fmin(fmax(sin_arg_r, cosh_arg_i), t_6) * (fmax(fmax(sin_arg_r, cosh_arg_i), t_6) * fmin(fmin(sin_arg_r, cosh_arg_i), hr))
    else
        tmp = t_4 * -t_1
    end if
    code = tmp
end function
public static double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	double t_0 = fmax(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_1 = fmax(fmax(cos_arg_r, sinh_arg_i), t_0);
	double t_2 = fmin(fmin(cos_arg_r, sinh_arg_i), hi);
	double t_3 = fmin(fmax(cos_arg_r, sinh_arg_i), t_0);
	double t_4 = t_2 * t_3;
	double t_5 = t_4 * t_1;
	double t_6 = fmax(fmin(sin_arg_r, cosh_arg_i), hr);
	double tmp;
	if (t_5 <= -4e-121) {
		tmp = (t_2 * t_1) * -t_3;
	} else if (t_5 <= 20000000.0) {
		tmp = fmin(fmax(sin_arg_r, cosh_arg_i), t_6) * (fmax(fmax(sin_arg_r, cosh_arg_i), t_6) * fmin(fmin(sin_arg_r, cosh_arg_i), hr));
	} else {
		tmp = t_4 * -t_1;
	}
	return tmp;
}
def code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	t_0 = fmax(fmin(cos_arg_r, sinh_arg_i), hi)
	t_1 = fmax(fmax(cos_arg_r, sinh_arg_i), t_0)
	t_2 = fmin(fmin(cos_arg_r, sinh_arg_i), hi)
	t_3 = fmin(fmax(cos_arg_r, sinh_arg_i), t_0)
	t_4 = t_2 * t_3
	t_5 = t_4 * t_1
	t_6 = fmax(fmin(sin_arg_r, cosh_arg_i), hr)
	tmp = 0
	if t_5 <= -4e-121:
		tmp = (t_2 * t_1) * -t_3
	elif t_5 <= 20000000.0:
		tmp = fmin(fmax(sin_arg_r, cosh_arg_i), t_6) * (fmax(fmax(sin_arg_r, cosh_arg_i), t_6) * fmin(fmin(sin_arg_r, cosh_arg_i), hr))
	else:
		tmp = t_4 * -t_1
	return tmp
function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	t_0 = fmax(fmin(cos_arg_r, sinh_arg_i), hi)
	t_1 = fmax(fmax(cos_arg_r, sinh_arg_i), t_0)
	t_2 = fmin(fmin(cos_arg_r, sinh_arg_i), hi)
	t_3 = fmin(fmax(cos_arg_r, sinh_arg_i), t_0)
	t_4 = Float64(t_2 * t_3)
	t_5 = Float64(t_4 * t_1)
	t_6 = fmax(fmin(sin_arg_r, cosh_arg_i), hr)
	tmp = 0.0
	if (t_5 <= -4e-121)
		tmp = Float64(Float64(t_2 * t_1) * Float64(-t_3));
	elseif (t_5 <= 20000000.0)
		tmp = Float64(fmin(fmax(sin_arg_r, cosh_arg_i), t_6) * Float64(fmax(fmax(sin_arg_r, cosh_arg_i), t_6) * fmin(fmin(sin_arg_r, cosh_arg_i), hr)));
	else
		tmp = Float64(t_4 * Float64(-t_1));
	end
	return tmp
end
function tmp_2 = code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	t_0 = max(min(cos_arg_r, sinh_arg_i), hi);
	t_1 = max(max(cos_arg_r, sinh_arg_i), t_0);
	t_2 = min(min(cos_arg_r, sinh_arg_i), hi);
	t_3 = min(max(cos_arg_r, sinh_arg_i), t_0);
	t_4 = t_2 * t_3;
	t_5 = t_4 * t_1;
	t_6 = max(min(sin_arg_r, cosh_arg_i), hr);
	tmp = 0.0;
	if (t_5 <= -4e-121)
		tmp = (t_2 * t_1) * -t_3;
	elseif (t_5 <= 20000000.0)
		tmp = min(max(sin_arg_r, cosh_arg_i), t_6) * (max(max(sin_arg_r, cosh_arg_i), t_6) * min(min(sin_arg_r, cosh_arg_i), hr));
	else
		tmp = t_4 * -t_1;
	end
	tmp_2 = tmp;
end
code[sin$95$arg$95$r_, cosh$95$arg$95$i_, cos$95$arg$95$r_, sinh$95$arg$95$i_, hr_, hi_] := Block[{t$95$0 = N[Max[N[Min[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], hi], $MachinePrecision]}, Block[{t$95$1 = N[Max[N[Max[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], t$95$0], $MachinePrecision]}, Block[{t$95$2 = N[Min[N[Min[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], hi], $MachinePrecision]}, Block[{t$95$3 = N[Min[N[Max[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], t$95$0], $MachinePrecision]}, Block[{t$95$4 = N[(t$95$2 * t$95$3), $MachinePrecision]}, Block[{t$95$5 = N[(t$95$4 * t$95$1), $MachinePrecision]}, Block[{t$95$6 = N[Max[N[Min[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], hr], $MachinePrecision]}, If[LessEqual[t$95$5, -4e-121], N[(N[(t$95$2 * t$95$1), $MachinePrecision] * (-t$95$3)), $MachinePrecision], If[LessEqual[t$95$5, 20000000.0], N[(N[Min[N[Max[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], t$95$6], $MachinePrecision] * N[(N[Max[N[Max[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], t$95$6], $MachinePrecision] * N[Min[N[Min[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], hr], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$4 * (-t$95$1)), $MachinePrecision]]]]]]]]]]
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	sin_arg_r in [-inf, +inf],
	cosh_arg_i in [-inf, +inf],
	cos_arg_r in [-inf, +inf],
	sinh_arg_i in [-inf, +inf],
	hr in [-inf, +inf],
	hi in [-inf, +inf]
code: THEORY
BEGIN
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi: real): real =
	LET tmp_2 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
	LET tmp_3 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
	LET tmp_1 = IF (tmp_2 > hi) THEN tmp_3 ELSE hi ENDIF IN
	LET t_0 = tmp_1 IN
		LET tmp_6 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
		LET tmp_7 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
		LET tmp_5 = IF (tmp_6 > t_0) THEN tmp_7 ELSE t_0 ENDIF IN
		LET t_1 = tmp_5 IN
			LET tmp_10 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
			LET tmp_11 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
			LET tmp_9 = IF (tmp_10 < hi) THEN tmp_11 ELSE hi ENDIF IN
			LET t_2 = tmp_9 IN
				LET tmp_14 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
				LET tmp_15 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
				LET tmp_13 = IF (tmp_14 < t_0) THEN tmp_15 ELSE t_0 ENDIF IN
				LET t_3 = tmp_13 IN
					LET t_4 = (t_2 * t_3) IN
						LET t_5 = (t_4 * t_1) IN
							LET tmp_18 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
							LET tmp_19 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
							LET tmp_17 = IF (tmp_18 > hr) THEN tmp_19 ELSE hr ENDIF IN
							LET t_6 = tmp_17 IN
								LET tmp_36 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
								LET tmp_37 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
								LET tmp_35 = IF (tmp_36 < t_6) THEN tmp_37 ELSE t_6 ENDIF IN
								LET tmp_40 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
								LET tmp_41 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
								LET tmp_39 = IF (tmp_40 > t_6) THEN tmp_41 ELSE t_6 ENDIF IN
								LET tmp_44 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
								LET tmp_45 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
								LET tmp_43 = IF (tmp_44 < hr) THEN tmp_45 ELSE hr ENDIF IN
								LET tmp_33 = IF (t_5 <= (2e7)) THEN (tmp_35 * (tmp_39 * tmp_43)) ELSE (t_4 * (- t_1)) ENDIF IN
								LET tmp_20 = IF (t_5 <= (-399999999999999991442765340849362499776451339209836950323129538159128824305482383666340230829489378768737574721987784017706752384336071373118332540902864745595700168478482217595202327049808376295310372056672153014508225812291293972882953315774522685348218996305047763293442443453753833734580502845545879608835093677043914794921875e-450)) THEN ((t_2 * t_1) * (- t_3)) ELSE tmp_33 ENDIF IN
	tmp_20
END code
\begin{array}{l}
t_0 := \mathsf{max}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\
t_1 := \mathsf{max}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_0\right)\\
t_2 := \mathsf{min}\left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\
t_3 := \mathsf{min}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), t\_0\right)\\
t_4 := t\_2 \cdot t\_3\\
t_5 := t\_4 \cdot t\_1\\
t_6 := \mathsf{max}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\\
\mathbf{if}\;t\_5 \leq -4 \cdot 10^{-121}:\\
\;\;\;\;\left(t\_2 \cdot t\_1\right) \cdot \left(-t\_3\right)\\

\mathbf{elif}\;t\_5 \leq 20000000:\\
\;\;\;\;\mathsf{min}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_6\right) \cdot \left(\mathsf{max}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_6\right) \cdot \mathsf{min}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\right)\\

\mathbf{else}:\\
\;\;\;\;t\_4 \cdot \left(-t\_1\right)\\


\end{array}
Derivation
  1. Split input into 3 regimes
  2. if (*.f64 (*.f64 cos_arg_r sinh_arg_i) hi) < -3.9999999999999999e-121

    1. Initial program 89.2%

      \[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
    2. Taylor expanded in sin_arg_r around 0

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
    3. Applied rewrites48.2%

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
    4. Applied rewrites48.7%

      \[\leadsto \left(cos\_arg\_r \cdot hi\right) \cdot \left(-sinh\_arg\_i\right) \]

    if -3.9999999999999999e-121 < (*.f64 (*.f64 cos_arg_r sinh_arg_i) hi) < 2e7

    1. Initial program 89.2%

      \[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
    2. Taylor expanded in sin_arg_r around 0

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
    3. Applied rewrites48.2%

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
    4. Applied rewrites39.5%

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(\left(\frac{sinh\_arg\_i}{cosh\_arg\_i} \cdot hi\right) \cdot cosh\_arg\_i\right)\right) \]
    5. Taylor expanded in sin_arg_r around inf

      \[\leadsto cosh\_arg\_i \cdot \left(hr \cdot sin\_arg\_r\right) \]
    6. Applied rewrites50.4%

      \[\leadsto cosh\_arg\_i \cdot \left(hr \cdot sin\_arg\_r\right) \]

    if 2e7 < (*.f64 (*.f64 cos_arg_r sinh_arg_i) hi)

    1. Initial program 89.2%

      \[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
    2. Taylor expanded in sin_arg_r around 0

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
    3. Applied rewrites48.2%

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
    4. Applied rewrites48.7%

      \[\leadsto \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot \left(-hi\right) \]
  3. Recombined 3 regimes into one program.
  4. Add Preprocessing

Alternative 5: 70.5% accurate, 0.2× speedup?

\[\begin{array}{l} t_0 := \mathsf{max}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\ t_1 := \mathsf{min}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\ t_2 := \left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right) \cdot t\_0\right) \cdot \left(-t\_1\right)\\ t_3 := \left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right) \cdot t\_1\right) \cdot t\_0\\ t_4 := \mathsf{max}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\\ \mathbf{if}\;t\_3 \leq -4 \cdot 10^{-121}:\\ \;\;\;\;t\_2\\ \mathbf{elif}\;t\_3 \leq 5 \cdot 10^{-12}:\\ \;\;\;\;\mathsf{min}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_4\right) \cdot \left(\mathsf{max}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_4\right) \cdot \mathsf{min}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\right)\\ \mathbf{else}:\\ \;\;\;\;t\_2\\ \end{array} \]
(FPCore (sin_arg_r cosh_arg_i cos_arg_r sinh_arg_i hr hi)
  :precision binary64
  :pre TRUE
  (let* ((t_0 (fmax (fmax cos_arg_r sinh_arg_i) hi))
       (t_1 (fmin (fmax cos_arg_r sinh_arg_i) hi))
       (t_2 (* (* (fmin cos_arg_r sinh_arg_i) t_0) (- t_1)))
       (t_3 (* (* (fmin cos_arg_r sinh_arg_i) t_1) t_0))
       (t_4 (fmax (fmin sin_arg_r cosh_arg_i) hr)))
  (if (<= t_3 -4e-121)
    t_2
    (if (<= t_3 5e-12)
      (*
       (fmin (fmax sin_arg_r cosh_arg_i) t_4)
       (*
        (fmax (fmax sin_arg_r cosh_arg_i) t_4)
        (fmin (fmin sin_arg_r cosh_arg_i) hr)))
      t_2))))
double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	double t_0 = fmax(fmax(cos_arg_r, sinh_arg_i), hi);
	double t_1 = fmin(fmax(cos_arg_r, sinh_arg_i), hi);
	double t_2 = (fmin(cos_arg_r, sinh_arg_i) * t_0) * -t_1;
	double t_3 = (fmin(cos_arg_r, sinh_arg_i) * t_1) * t_0;
	double t_4 = fmax(fmin(sin_arg_r, cosh_arg_i), hr);
	double tmp;
	if (t_3 <= -4e-121) {
		tmp = t_2;
	} else if (t_3 <= 5e-12) {
		tmp = fmin(fmax(sin_arg_r, cosh_arg_i), t_4) * (fmax(fmax(sin_arg_r, cosh_arg_i), t_4) * fmin(fmin(sin_arg_r, cosh_arg_i), hr));
	} else {
		tmp = t_2;
	}
	return tmp;
}
real(8) function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
use fmin_fmax_functions
    real(8), intent (in) :: sin_arg_r
    real(8), intent (in) :: cosh_arg_i
    real(8), intent (in) :: cos_arg_r
    real(8), intent (in) :: sinh_arg_i
    real(8), intent (in) :: hr
    real(8), intent (in) :: hi
    real(8) :: t_0
    real(8) :: t_1
    real(8) :: t_2
    real(8) :: t_3
    real(8) :: t_4
    real(8) :: tmp
    t_0 = fmax(fmax(cos_arg_r, sinh_arg_i), hi)
    t_1 = fmin(fmax(cos_arg_r, sinh_arg_i), hi)
    t_2 = (fmin(cos_arg_r, sinh_arg_i) * t_0) * -t_1
    t_3 = (fmin(cos_arg_r, sinh_arg_i) * t_1) * t_0
    t_4 = fmax(fmin(sin_arg_r, cosh_arg_i), hr)
    if (t_3 <= (-4d-121)) then
        tmp = t_2
    else if (t_3 <= 5d-12) then
        tmp = fmin(fmax(sin_arg_r, cosh_arg_i), t_4) * (fmax(fmax(sin_arg_r, cosh_arg_i), t_4) * fmin(fmin(sin_arg_r, cosh_arg_i), hr))
    else
        tmp = t_2
    end if
    code = tmp
end function
public static double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	double t_0 = fmax(fmax(cos_arg_r, sinh_arg_i), hi);
	double t_1 = fmin(fmax(cos_arg_r, sinh_arg_i), hi);
	double t_2 = (fmin(cos_arg_r, sinh_arg_i) * t_0) * -t_1;
	double t_3 = (fmin(cos_arg_r, sinh_arg_i) * t_1) * t_0;
	double t_4 = fmax(fmin(sin_arg_r, cosh_arg_i), hr);
	double tmp;
	if (t_3 <= -4e-121) {
		tmp = t_2;
	} else if (t_3 <= 5e-12) {
		tmp = fmin(fmax(sin_arg_r, cosh_arg_i), t_4) * (fmax(fmax(sin_arg_r, cosh_arg_i), t_4) * fmin(fmin(sin_arg_r, cosh_arg_i), hr));
	} else {
		tmp = t_2;
	}
	return tmp;
}
def code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	t_0 = fmax(fmax(cos_arg_r, sinh_arg_i), hi)
	t_1 = fmin(fmax(cos_arg_r, sinh_arg_i), hi)
	t_2 = (fmin(cos_arg_r, sinh_arg_i) * t_0) * -t_1
	t_3 = (fmin(cos_arg_r, sinh_arg_i) * t_1) * t_0
	t_4 = fmax(fmin(sin_arg_r, cosh_arg_i), hr)
	tmp = 0
	if t_3 <= -4e-121:
		tmp = t_2
	elif t_3 <= 5e-12:
		tmp = fmin(fmax(sin_arg_r, cosh_arg_i), t_4) * (fmax(fmax(sin_arg_r, cosh_arg_i), t_4) * fmin(fmin(sin_arg_r, cosh_arg_i), hr))
	else:
		tmp = t_2
	return tmp
function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	t_0 = fmax(fmax(cos_arg_r, sinh_arg_i), hi)
	t_1 = fmin(fmax(cos_arg_r, sinh_arg_i), hi)
	t_2 = Float64(Float64(fmin(cos_arg_r, sinh_arg_i) * t_0) * Float64(-t_1))
	t_3 = Float64(Float64(fmin(cos_arg_r, sinh_arg_i) * t_1) * t_0)
	t_4 = fmax(fmin(sin_arg_r, cosh_arg_i), hr)
	tmp = 0.0
	if (t_3 <= -4e-121)
		tmp = t_2;
	elseif (t_3 <= 5e-12)
		tmp = Float64(fmin(fmax(sin_arg_r, cosh_arg_i), t_4) * Float64(fmax(fmax(sin_arg_r, cosh_arg_i), t_4) * fmin(fmin(sin_arg_r, cosh_arg_i), hr)));
	else
		tmp = t_2;
	end
	return tmp
end
function tmp_2 = code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	t_0 = max(max(cos_arg_r, sinh_arg_i), hi);
	t_1 = min(max(cos_arg_r, sinh_arg_i), hi);
	t_2 = (min(cos_arg_r, sinh_arg_i) * t_0) * -t_1;
	t_3 = (min(cos_arg_r, sinh_arg_i) * t_1) * t_0;
	t_4 = max(min(sin_arg_r, cosh_arg_i), hr);
	tmp = 0.0;
	if (t_3 <= -4e-121)
		tmp = t_2;
	elseif (t_3 <= 5e-12)
		tmp = min(max(sin_arg_r, cosh_arg_i), t_4) * (max(max(sin_arg_r, cosh_arg_i), t_4) * min(min(sin_arg_r, cosh_arg_i), hr));
	else
		tmp = t_2;
	end
	tmp_2 = tmp;
end
code[sin$95$arg$95$r_, cosh$95$arg$95$i_, cos$95$arg$95$r_, sinh$95$arg$95$i_, hr_, hi_] := Block[{t$95$0 = N[Max[N[Max[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], hi], $MachinePrecision]}, Block[{t$95$1 = N[Min[N[Max[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision], hi], $MachinePrecision]}, Block[{t$95$2 = N[(N[(N[Min[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision] * t$95$0), $MachinePrecision] * (-t$95$1)), $MachinePrecision]}, Block[{t$95$3 = N[(N[(N[Min[cos$95$arg$95$r, sinh$95$arg$95$i], $MachinePrecision] * t$95$1), $MachinePrecision] * t$95$0), $MachinePrecision]}, Block[{t$95$4 = N[Max[N[Min[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], hr], $MachinePrecision]}, If[LessEqual[t$95$3, -4e-121], t$95$2, If[LessEqual[t$95$3, 5e-12], N[(N[Min[N[Max[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], t$95$4], $MachinePrecision] * N[(N[Max[N[Max[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], t$95$4], $MachinePrecision] * N[Min[N[Min[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], hr], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	sin_arg_r in [-inf, +inf],
	cosh_arg_i in [-inf, +inf],
	cos_arg_r in [-inf, +inf],
	sinh_arg_i in [-inf, +inf],
	hr in [-inf, +inf],
	hi in [-inf, +inf]
code: THEORY
BEGIN
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi: real): real =
	LET tmp_2 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
	LET tmp_3 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
	LET tmp_1 = IF (tmp_2 > hi) THEN tmp_3 ELSE hi ENDIF IN
	LET t_0 = tmp_1 IN
		LET tmp_6 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
		LET tmp_7 = IF (cos_arg_r > sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
		LET tmp_5 = IF (tmp_6 < hi) THEN tmp_7 ELSE hi ENDIF IN
		LET t_1 = tmp_5 IN
			LET tmp_8 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
			LET t_2 = ((tmp_8 * t_0) * (- t_1)) IN
				LET tmp_9 = IF (cos_arg_r < sinh_arg_i) THEN cos_arg_r ELSE sinh_arg_i ENDIF IN
				LET t_3 = ((tmp_9 * t_1) * t_0) IN
					LET tmp_12 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
					LET tmp_13 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
					LET tmp_11 = IF (tmp_12 > hr) THEN tmp_13 ELSE hr ENDIF IN
					LET t_4 = tmp_11 IN
						LET tmp_30 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
						LET tmp_31 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
						LET tmp_29 = IF (tmp_30 < t_4) THEN tmp_31 ELSE t_4 ENDIF IN
						LET tmp_34 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
						LET tmp_35 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
						LET tmp_33 = IF (tmp_34 > t_4) THEN tmp_35 ELSE t_4 ENDIF IN
						LET tmp_38 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
						LET tmp_39 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
						LET tmp_37 = IF (tmp_38 < hr) THEN tmp_39 ELSE hr ENDIF IN
						LET tmp_27 = IF (t_3 <= (4999999999999999697484846409699054650861704818254338533733971416950225830078125e-90)) THEN (tmp_29 * (tmp_33 * tmp_37)) ELSE t_2 ENDIF IN
						LET tmp_14 = IF (t_3 <= (-399999999999999991442765340849362499776451339209836950323129538159128824305482383666340230829489378768737574721987784017706752384336071373118332540902864745595700168478482217595202327049808376295310372056672153014508225812291293972882953315774522685348218996305047763293442443453753833734580502845545879608835093677043914794921875e-450)) THEN t_2 ELSE tmp_27 ENDIF IN
	tmp_14
END code
\begin{array}{l}
t_0 := \mathsf{max}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\
t_1 := \mathsf{min}\left(\mathsf{max}\left(cos\_arg\_r, sinh\_arg\_i\right), hi\right)\\
t_2 := \left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right) \cdot t\_0\right) \cdot \left(-t\_1\right)\\
t_3 := \left(\mathsf{min}\left(cos\_arg\_r, sinh\_arg\_i\right) \cdot t\_1\right) \cdot t\_0\\
t_4 := \mathsf{max}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\\
\mathbf{if}\;t\_3 \leq -4 \cdot 10^{-121}:\\
\;\;\;\;t\_2\\

\mathbf{elif}\;t\_3 \leq 5 \cdot 10^{-12}:\\
\;\;\;\;\mathsf{min}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_4\right) \cdot \left(\mathsf{max}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), t\_4\right) \cdot \mathsf{min}\left(\mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right)\right)\\

\mathbf{else}:\\
\;\;\;\;t\_2\\


\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (*.f64 (*.f64 cos_arg_r sinh_arg_i) hi) < -3.9999999999999999e-121 or 4.9999999999999997e-12 < (*.f64 (*.f64 cos_arg_r sinh_arg_i) hi)

    1. Initial program 89.2%

      \[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
    2. Taylor expanded in sin_arg_r around 0

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
    3. Applied rewrites48.2%

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
    4. Applied rewrites48.7%

      \[\leadsto \left(cos\_arg\_r \cdot hi\right) \cdot \left(-sinh\_arg\_i\right) \]

    if -3.9999999999999999e-121 < (*.f64 (*.f64 cos_arg_r sinh_arg_i) hi) < 4.9999999999999997e-12

    1. Initial program 89.2%

      \[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
    2. Taylor expanded in sin_arg_r around 0

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
    3. Applied rewrites48.2%

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
    4. Applied rewrites39.5%

      \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(\left(\frac{sinh\_arg\_i}{cosh\_arg\_i} \cdot hi\right) \cdot cosh\_arg\_i\right)\right) \]
    5. Taylor expanded in sin_arg_r around inf

      \[\leadsto cosh\_arg\_i \cdot \left(hr \cdot sin\_arg\_r\right) \]
    6. Applied rewrites50.4%

      \[\leadsto cosh\_arg\_i \cdot \left(hr \cdot sin\_arg\_r\right) \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 6: 50.3% accurate, 0.7× speedup?

\[\mathsf{min}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right) \cdot \left(\mathsf{max}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right) \cdot \mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right)\right) \]
(FPCore (sin_arg_r cosh_arg_i cos_arg_r sinh_arg_i hr hi)
  :precision binary64
  :pre TRUE
  (*
 (fmin (fmax sin_arg_r cosh_arg_i) hr)
 (*
  (fmax (fmax sin_arg_r cosh_arg_i) hr)
  (fmin sin_arg_r cosh_arg_i))))
double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	return fmin(fmax(sin_arg_r, cosh_arg_i), hr) * (fmax(fmax(sin_arg_r, cosh_arg_i), hr) * fmin(sin_arg_r, cosh_arg_i));
}
real(8) function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
use fmin_fmax_functions
    real(8), intent (in) :: sin_arg_r
    real(8), intent (in) :: cosh_arg_i
    real(8), intent (in) :: cos_arg_r
    real(8), intent (in) :: sinh_arg_i
    real(8), intent (in) :: hr
    real(8), intent (in) :: hi
    code = fmin(fmax(sin_arg_r, cosh_arg_i), hr) * (fmax(fmax(sin_arg_r, cosh_arg_i), hr) * fmin(sin_arg_r, cosh_arg_i))
end function
public static double code(double sin_arg_r, double cosh_arg_i, double cos_arg_r, double sinh_arg_i, double hr, double hi) {
	return fmin(fmax(sin_arg_r, cosh_arg_i), hr) * (fmax(fmax(sin_arg_r, cosh_arg_i), hr) * fmin(sin_arg_r, cosh_arg_i));
}
def code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	return fmin(fmax(sin_arg_r, cosh_arg_i), hr) * (fmax(fmax(sin_arg_r, cosh_arg_i), hr) * fmin(sin_arg_r, cosh_arg_i))
function code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	return Float64(fmin(fmax(sin_arg_r, cosh_arg_i), hr) * Float64(fmax(fmax(sin_arg_r, cosh_arg_i), hr) * fmin(sin_arg_r, cosh_arg_i)))
end
function tmp = code(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi)
	tmp = min(max(sin_arg_r, cosh_arg_i), hr) * (max(max(sin_arg_r, cosh_arg_i), hr) * min(sin_arg_r, cosh_arg_i));
end
code[sin$95$arg$95$r_, cosh$95$arg$95$i_, cos$95$arg$95$r_, sinh$95$arg$95$i_, hr_, hi_] := N[(N[Min[N[Max[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], hr], $MachinePrecision] * N[(N[Max[N[Max[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision], hr], $MachinePrecision] * N[Min[sin$95$arg$95$r, cosh$95$arg$95$i], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi):
	sin_arg_r in [-inf, +inf],
	cosh_arg_i in [-inf, +inf],
	cos_arg_r in [-inf, +inf],
	sinh_arg_i in [-inf, +inf],
	hr in [-inf, +inf],
	hi in [-inf, +inf]
code: THEORY
BEGIN
f(sin_arg_r, cosh_arg_i, cos_arg_r, sinh_arg_i, hr, hi: real): real =
	LET tmp_2 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
	LET tmp_3 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
	LET tmp_1 = IF (tmp_2 < hr) THEN tmp_3 ELSE hr ENDIF IN
	LET tmp_6 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
	LET tmp_7 = IF (sin_arg_r > cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
	LET tmp_5 = IF (tmp_6 > hr) THEN tmp_7 ELSE hr ENDIF IN
	LET tmp_8 = IF (sin_arg_r < cosh_arg_i) THEN sin_arg_r ELSE cosh_arg_i ENDIF IN
	tmp_1 * (tmp_5 * tmp_8)
END code
\mathsf{min}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right) \cdot \left(\mathsf{max}\left(\mathsf{max}\left(sin\_arg\_r, cosh\_arg\_i\right), hr\right) \cdot \mathsf{min}\left(sin\_arg\_r, cosh\_arg\_i\right)\right)
Derivation
  1. Initial program 89.2%

    \[\left(sin\_arg\_r \cdot cosh\_arg\_i\right) \cdot hr - \left(cos\_arg\_r \cdot sinh\_arg\_i\right) \cdot hi \]
  2. Taylor expanded in sin_arg_r around 0

    \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
  3. Applied rewrites48.2%

    \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(hi \cdot sinh\_arg\_i\right)\right) \]
  4. Applied rewrites39.5%

    \[\leadsto -1 \cdot \left(cos\_arg\_r \cdot \left(\left(\frac{sinh\_arg\_i}{cosh\_arg\_i} \cdot hi\right) \cdot cosh\_arg\_i\right)\right) \]
  5. Taylor expanded in sin_arg_r around inf

    \[\leadsto cosh\_arg\_i \cdot \left(hr \cdot sin\_arg\_r\right) \]
  6. Applied rewrites50.4%

    \[\leadsto cosh\_arg\_i \cdot \left(hr \cdot sin\_arg\_r\right) \]
  7. Add Preprocessing

Reproduce

?
herbie shell --seed 2026050 +o generate:egglog
(FPCore (sin_arg_r cosh_arg_i cos_arg_r sinh_arg_i hr hi)
  :name "clenshaw-final-real"
  :precision binary64
  (- (* (* sin_arg_r cosh_arg_i) hr) (* (* cos_arg_r sinh_arg_i) hi)))