Average Error: 0.5 → 0.4
Time: 35.7s
Precision: binary64
Cost: 14272
\[\left(\left(\left(\left(\left(-1 \leq cosTheta_i \land cosTheta_i \leq 1\right) \land \left(-1 \leq cosTheta_O \land cosTheta_O \leq 1\right)\right) \land \left(-1 \leq sinTheta_i \land sinTheta_i \leq 1\right)\right) \land \left(-1 \leq sinTheta_O \land sinTheta_O \leq 1\right)\right) \land 0.1 < v\right) \land v \leq 1.5707964\]
\[\frac{e^{-\frac{sinTheta_i \cdot sinTheta_O}{v}} \cdot \frac{cosTheta_i \cdot cosTheta_O}{v}}{\left(\sinh \left(\frac{1}{v}\right) \cdot 2\right) \cdot v} \]
\[\frac{\frac{e^{-\frac{sinTheta_i \cdot sinTheta_O}{v}}}{-v} \cdot \left(\frac{-1}{v} \cdot \left(cosTheta_i \cdot cosTheta_O\right)\right)}{\sinh \left(\frac{1}{v}\right) \cdot 2} \]
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary64
 (/
  (* (exp (- (/ (* sinTheta_i sinTheta_O) v))) (/ (* cosTheta_i cosTheta_O) v))
  (* (* (sinh (/ 1.0 v)) 2.0) v)))
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary64
 (/
  (*
   (/ (exp (- (/ (* sinTheta_i sinTheta_O) v))) (- v))
   (* (/ -1.0 v) (* cosTheta_i cosTheta_O)))
  (* (sinh (/ 1.0 v)) 2.0)))
double code(double cosTheta_i, double cosTheta_O, double sinTheta_i, double sinTheta_O, double v) {
	return (exp(-((sinTheta_i * sinTheta_O) / v)) * ((cosTheta_i * cosTheta_O) / v)) / ((sinh((1.0 / v)) * 2.0) * v);
}
double code(double cosTheta_i, double cosTheta_O, double sinTheta_i, double sinTheta_O, double v) {
	return ((exp(-((sinTheta_i * sinTheta_O) / v)) / -v) * ((-1.0 / v) * (cosTheta_i * cosTheta_O))) / (sinh((1.0 / v)) * 2.0);
}
real(8) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(8), intent (in) :: costheta_i
    real(8), intent (in) :: costheta_o
    real(8), intent (in) :: sintheta_i
    real(8), intent (in) :: sintheta_o
    real(8), intent (in) :: v
    code = (exp(-((sintheta_i * sintheta_o) / v)) * ((costheta_i * costheta_o) / v)) / ((sinh((1.0d0 / v)) * 2.0d0) * v)
end function
real(8) function code(costheta_i, costheta_o, sintheta_i, sintheta_o, v)
    real(8), intent (in) :: costheta_i
    real(8), intent (in) :: costheta_o
    real(8), intent (in) :: sintheta_i
    real(8), intent (in) :: sintheta_o
    real(8), intent (in) :: v
    code = ((exp(-((sintheta_i * sintheta_o) / v)) / -v) * (((-1.0d0) / v) * (costheta_i * costheta_o))) / (sinh((1.0d0 / v)) * 2.0d0)
end function
public static double code(double cosTheta_i, double cosTheta_O, double sinTheta_i, double sinTheta_O, double v) {
	return (Math.exp(-((sinTheta_i * sinTheta_O) / v)) * ((cosTheta_i * cosTheta_O) / v)) / ((Math.sinh((1.0 / v)) * 2.0) * v);
}
public static double code(double cosTheta_i, double cosTheta_O, double sinTheta_i, double sinTheta_O, double v) {
	return ((Math.exp(-((sinTheta_i * sinTheta_O) / v)) / -v) * ((-1.0 / v) * (cosTheta_i * cosTheta_O))) / (Math.sinh((1.0 / v)) * 2.0);
}
def code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v):
	return (math.exp(-((sinTheta_i * sinTheta_O) / v)) * ((cosTheta_i * cosTheta_O) / v)) / ((math.sinh((1.0 / v)) * 2.0) * v)
def code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v):
	return ((math.exp(-((sinTheta_i * sinTheta_O) / v)) / -v) * ((-1.0 / v) * (cosTheta_i * cosTheta_O))) / (math.sinh((1.0 / v)) * 2.0)
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return Float64(Float64(exp(Float64(-Float64(Float64(sinTheta_i * sinTheta_O) / v))) * Float64(Float64(cosTheta_i * cosTheta_O) / v)) / Float64(Float64(sinh(Float64(1.0 / v)) * 2.0) * v))
end
function code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	return Float64(Float64(Float64(exp(Float64(-Float64(Float64(sinTheta_i * sinTheta_O) / v))) / Float64(-v)) * Float64(Float64(-1.0 / v) * Float64(cosTheta_i * cosTheta_O))) / Float64(sinh(Float64(1.0 / v)) * 2.0))
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = (exp(-((sinTheta_i * sinTheta_O) / v)) * ((cosTheta_i * cosTheta_O) / v)) / ((sinh((1.0 / v)) * 2.0) * v);
end
function tmp = code(cosTheta_i, cosTheta_O, sinTheta_i, sinTheta_O, v)
	tmp = ((exp(-((sinTheta_i * sinTheta_O) / v)) / -v) * ((-1.0 / v) * (cosTheta_i * cosTheta_O))) / (sinh((1.0 / v)) * 2.0);
end
code[cosTheta$95$i_, cosTheta$95$O_, sinTheta$95$i_, sinTheta$95$O_, v_] := N[(N[(N[Exp[(-N[(N[(sinTheta$95$i * sinTheta$95$O), $MachinePrecision] / v), $MachinePrecision])], $MachinePrecision] * N[(N[(cosTheta$95$i * cosTheta$95$O), $MachinePrecision] / v), $MachinePrecision]), $MachinePrecision] / N[(N[(N[Sinh[N[(1.0 / v), $MachinePrecision]], $MachinePrecision] * 2.0), $MachinePrecision] * v), $MachinePrecision]), $MachinePrecision]
code[cosTheta$95$i_, cosTheta$95$O_, sinTheta$95$i_, sinTheta$95$O_, v_] := N[(N[(N[(N[Exp[(-N[(N[(sinTheta$95$i * sinTheta$95$O), $MachinePrecision] / v), $MachinePrecision])], $MachinePrecision] / (-v)), $MachinePrecision] * N[(N[(-1.0 / v), $MachinePrecision] * N[(cosTheta$95$i * cosTheta$95$O), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(N[Sinh[N[(1.0 / v), $MachinePrecision]], $MachinePrecision] * 2.0), $MachinePrecision]), $MachinePrecision]
\frac{e^{-\frac{sinTheta_i \cdot sinTheta_O}{v}} \cdot \frac{cosTheta_i \cdot cosTheta_O}{v}}{\left(\sinh \left(\frac{1}{v}\right) \cdot 2\right) \cdot v}
\frac{\frac{e^{-\frac{sinTheta_i \cdot sinTheta_O}{v}}}{-v} \cdot \left(\frac{-1}{v} \cdot \left(cosTheta_i \cdot cosTheta_O\right)\right)}{\sinh \left(\frac{1}{v}\right) \cdot 2}

Error

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.5

    \[\frac{e^{-\frac{sinTheta_i \cdot sinTheta_O}{v}} \cdot \frac{cosTheta_i \cdot cosTheta_O}{v}}{\left(\sinh \left(\frac{1}{v}\right) \cdot 2\right) \cdot v} \]
  2. Applied egg-rr0.4

    \[\leadsto \color{blue}{\frac{\frac{cosTheta_i \cdot cosTheta_O}{v} \cdot \frac{e^{-\frac{sinTheta_i \cdot sinTheta_O}{v}}}{v}}{\sinh \left(\frac{1}{v}\right) \cdot 2}} \]
  3. Applied egg-rr0.4

    \[\leadsto \frac{\color{blue}{\frac{\frac{e^{-\frac{sinTheta_i \cdot sinTheta_O}{v}}}{v}}{v} \cdot \left(cosTheta_i \cdot cosTheta_O\right)}}{\sinh \left(\frac{1}{v}\right) \cdot 2} \]
  4. Applied egg-rr0.4

    \[\leadsto \frac{\color{blue}{\frac{e^{-\frac{sinTheta_i \cdot sinTheta_O}{v}}}{-v} \cdot \left(\frac{-1}{v} \cdot \left(cosTheta_i \cdot cosTheta_O\right)\right)}}{\sinh \left(\frac{1}{v}\right) \cdot 2} \]

Alternatives

Alternative 1
Error0.4
Cost14080
\[\left(cosTheta_i \cdot cosTheta_O\right) \cdot \left(\frac{e^{-\frac{sinTheta_i \cdot sinTheta_O}{v}}}{v} \cdot \frac{0.5}{v \cdot \sinh \left(\frac{1}{v}\right)}\right) \]
Alternative 2
Error0.4
Cost14080
\[\frac{\frac{cosTheta_i \cdot cosTheta_O}{v} \cdot \frac{e^{-\frac{sinTheta_i \cdot sinTheta_O}{v}}}{v}}{\sinh \left(\frac{1}{v}\right) \cdot 2} \]
Alternative 3
Error0.4
Cost13696
\[\frac{\left({\left(\frac{-1}{v}\right)}^{2} \cdot cosTheta_O\right) \cdot cosTheta_i}{\sinh \left(\frac{1}{v}\right) \cdot 2} \]
Alternative 4
Error0.5
Cost7232
\[\frac{\frac{cosTheta_i \cdot cosTheta_O}{v \cdot v}}{\sinh \left(\frac{1}{v}\right) \cdot 2} \]
Alternative 5
Error27.0
Cost832
\[\frac{\frac{cosTheta_i \cdot cosTheta_O}{1 + \frac{1}{v}}}{v + v} \]
Alternative 6
Error27.2
Cost708
\[\begin{array}{l} \mathbf{if}\;cosTheta_i \cdot cosTheta_O \ne 0:\\ \;\;\;\;\frac{0.5}{\frac{v}{cosTheta_i \cdot cosTheta_O}}\\ \mathbf{else}:\\ \;\;\;\;\frac{cosTheta_i \cdot cosTheta_O}{v \cdot 2}\\ \end{array} \]
Alternative 7
Error27.3
Cost704
\[\frac{0.5 \cdot \left(v \cdot \left(cosTheta_i \cdot cosTheta_O\right)\right)}{v \cdot v} \]
Alternative 8
Error27.3
Cost576
\[\frac{1.5}{v} \cdot \left(\left(cosTheta_O \cdot cosTheta_i\right) \cdot 0.3333333333333333\right) \]
Alternative 9
Error27.3
Cost576
\[\frac{\left(cosTheta_i \cdot cosTheta_O\right) \cdot 0.3333333333333333}{v} \cdot 1.5 \]
Alternative 10
Error27.3
Cost448
\[0.5 \cdot \frac{cosTheta_i \cdot cosTheta_O}{v} \]
Alternative 11
Error27.3
Cost448
\[cosTheta_O \cdot \left(cosTheta_i \cdot \frac{0.5}{v}\right) \]
Alternative 12
Error27.3
Cost448
\[\frac{0.5 \cdot \left(cosTheta_i \cdot cosTheta_O\right)}{v} \]

Error

Reproduce

herbie shell --seed 2023010 
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
  :name "HairBSDF, Mp, upper"
  :precision binary64
  :pre (and (and (and (and (and (and (<= -1.0 cosTheta_i) (<= cosTheta_i 1.0)) (and (<= -1.0 cosTheta_O) (<= cosTheta_O 1.0))) (and (<= -1.0 sinTheta_i) (<= sinTheta_i 1.0))) (and (<= -1.0 sinTheta_O) (<= sinTheta_O 1.0))) (< 0.1 v)) (<= v 1.5707964))
  (/ (* (exp (- (/ (* sinTheta_i sinTheta_O) v))) (/ (* cosTheta_i cosTheta_O) v)) (* (* (sinh (/ 1.0 v)) 2.0) v)))