Average Error: 0.4 → 0.1
Time: 29.4s
Precision: binary64
Cost: 66244
\[\left(0 < cosTheta \land cosTheta < 0.9999\right) \land \left(-1 < c \land c < 1\right)\]
\[\frac{1}{\left(1 + c\right) + \left(\frac{1}{\sqrt{\pi}} \cdot \frac{\sqrt{\left(1 - cosTheta\right) - cosTheta}}{cosTheta}\right) \cdot e^{\left(-cosTheta\right) \cdot cosTheta}} \]
\[\begin{array}{l} t_0 := \sqrt{\mathsf{fma}\left(-2, cosTheta, 1\right)}\\ t_1 := \mathsf{fma}\left(c, -1 + c, 1\right)\\ t_2 := cosTheta \cdot t_1\\ \mathbf{if}\;t_2 \ne 0:\\ \;\;\;\;\frac{t_2}{\mathsf{fma}\left(\frac{\frac{t_0}{e^{cosTheta \cdot cosTheta}}}{\sqrt{\pi}}, t_1, cosTheta \cdot \left(1 + {c}^{3}\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{-1 - \mathsf{fma}\left(\frac{\frac{t_0}{cosTheta}}{\sqrt{\pi}}, e^{-cosTheta \cdot cosTheta}, c\right)}\\ \end{array} \]
(FPCore (cosTheta c)
 :precision binary64
 (/
  1.0
  (+
   (+ 1.0 c)
   (*
    (* (/ 1.0 (sqrt PI)) (/ (sqrt (- (- 1.0 cosTheta) cosTheta)) cosTheta))
    (exp (* (- cosTheta) cosTheta))))))
(FPCore (cosTheta c)
 :precision binary64
 (let* ((t_0 (sqrt (fma -2.0 cosTheta 1.0)))
        (t_1 (fma c (+ -1.0 c) 1.0))
        (t_2 (* cosTheta t_1)))
   (if (!= t_2 0.0)
     (/
      t_2
      (fma
       (/ (/ t_0 (exp (* cosTheta cosTheta))) (sqrt PI))
       t_1
       (* cosTheta (+ 1.0 (pow c 3.0)))))
     (/
      -1.0
      (-
       -1.0
       (fma
        (/ (/ t_0 cosTheta) (sqrt PI))
        (exp (- (* cosTheta cosTheta)))
        c))))))
double code(double cosTheta, double c) {
	return 1.0 / ((1.0 + c) + (((1.0 / sqrt(((double) M_PI))) * (sqrt(((1.0 - cosTheta) - cosTheta)) / cosTheta)) * exp((-cosTheta * cosTheta))));
}
double code(double cosTheta, double c) {
	double t_0 = sqrt(fma(-2.0, cosTheta, 1.0));
	double t_1 = fma(c, (-1.0 + c), 1.0);
	double t_2 = cosTheta * t_1;
	double tmp;
	if (t_2 != 0.0) {
		tmp = t_2 / fma(((t_0 / exp((cosTheta * cosTheta))) / sqrt(((double) M_PI))), t_1, (cosTheta * (1.0 + pow(c, 3.0))));
	} else {
		tmp = -1.0 / (-1.0 - fma(((t_0 / cosTheta) / sqrt(((double) M_PI))), exp(-(cosTheta * cosTheta)), c));
	}
	return tmp;
}
function code(cosTheta, c)
	return Float64(1.0 / Float64(Float64(1.0 + c) + Float64(Float64(Float64(1.0 / sqrt(pi)) * Float64(sqrt(Float64(Float64(1.0 - cosTheta) - cosTheta)) / cosTheta)) * exp(Float64(Float64(-cosTheta) * cosTheta)))))
end
function code(cosTheta, c)
	t_0 = sqrt(fma(-2.0, cosTheta, 1.0))
	t_1 = fma(c, Float64(-1.0 + c), 1.0)
	t_2 = Float64(cosTheta * t_1)
	tmp = 0.0
	if (t_2 != 0.0)
		tmp = Float64(t_2 / fma(Float64(Float64(t_0 / exp(Float64(cosTheta * cosTheta))) / sqrt(pi)), t_1, Float64(cosTheta * Float64(1.0 + (c ^ 3.0)))));
	else
		tmp = Float64(-1.0 / Float64(-1.0 - fma(Float64(Float64(t_0 / cosTheta) / sqrt(pi)), exp(Float64(-Float64(cosTheta * cosTheta))), c)));
	end
	return tmp
end
code[cosTheta_, c_] := N[(1.0 / N[(N[(1.0 + c), $MachinePrecision] + N[(N[(N[(1.0 / N[Sqrt[Pi], $MachinePrecision]), $MachinePrecision] * N[(N[Sqrt[N[(N[(1.0 - cosTheta), $MachinePrecision] - cosTheta), $MachinePrecision]], $MachinePrecision] / cosTheta), $MachinePrecision]), $MachinePrecision] * N[Exp[N[((-cosTheta) * cosTheta), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[cosTheta_, c_] := Block[{t$95$0 = N[Sqrt[N[(-2.0 * cosTheta + 1.0), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(c * N[(-1.0 + c), $MachinePrecision] + 1.0), $MachinePrecision]}, Block[{t$95$2 = N[(cosTheta * t$95$1), $MachinePrecision]}, If[Unequal[t$95$2, 0.0], N[(t$95$2 / N[(N[(N[(t$95$0 / N[Exp[N[(cosTheta * cosTheta), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[Sqrt[Pi], $MachinePrecision]), $MachinePrecision] * t$95$1 + N[(cosTheta * N[(1.0 + N[Power[c, 3.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(-1.0 / N[(-1.0 - N[(N[(N[(t$95$0 / cosTheta), $MachinePrecision] / N[Sqrt[Pi], $MachinePrecision]), $MachinePrecision] * N[Exp[(-N[(cosTheta * cosTheta), $MachinePrecision])], $MachinePrecision] + c), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\frac{1}{\left(1 + c\right) + \left(\frac{1}{\sqrt{\pi}} \cdot \frac{\sqrt{\left(1 - cosTheta\right) - cosTheta}}{cosTheta}\right) \cdot e^{\left(-cosTheta\right) \cdot cosTheta}}
\begin{array}{l}
t_0 := \sqrt{\mathsf{fma}\left(-2, cosTheta, 1\right)}\\
t_1 := \mathsf{fma}\left(c, -1 + c, 1\right)\\
t_2 := cosTheta \cdot t_1\\
\mathbf{if}\;t_2 \ne 0:\\
\;\;\;\;\frac{t_2}{\mathsf{fma}\left(\frac{\frac{t_0}{e^{cosTheta \cdot cosTheta}}}{\sqrt{\pi}}, t_1, cosTheta \cdot \left(1 + {c}^{3}\right)\right)}\\

\mathbf{else}:\\
\;\;\;\;\frac{-1}{-1 - \mathsf{fma}\left(\frac{\frac{t_0}{cosTheta}}{\sqrt{\pi}}, e^{-cosTheta \cdot cosTheta}, c\right)}\\


\end{array}

Error

Derivation

  1. Initial program 0.4

    \[\frac{1}{\left(1 + c\right) + \left(\frac{1}{\sqrt{\pi}} \cdot \frac{\sqrt{\left(1 - cosTheta\right) - cosTheta}}{cosTheta}\right) \cdot e^{\left(-cosTheta\right) \cdot cosTheta}} \]
  2. Applied egg-rr0.3

    \[\leadsto \frac{1}{\left(1 + c\right) + \color{blue}{\frac{\frac{\sqrt{1 - \left(cosTheta + cosTheta\right)}}{\sqrt{\pi}}}{cosTheta}} \cdot e^{\left(-cosTheta\right) \cdot cosTheta}} \]
  3. Applied egg-rr0.3

    \[\leadsto \color{blue}{\begin{array}{l} \color{blue}{\mathbf{if}\;cosTheta \cdot \mathsf{fma}\left(c, -1 + c, 1\right) \ne 0:\\ \;\;\;\;\frac{1}{\mathsf{fma}\left(\frac{\frac{\sqrt{\mathsf{fma}\left(-2, cosTheta, 1\right)}}{e^{cosTheta \cdot cosTheta}}}{\sqrt{\pi}}, \mathsf{fma}\left(c, -1 + c, 1\right), cosTheta \cdot \left(1 + {c}^{3}\right)\right)} \cdot \left(cosTheta \cdot \mathsf{fma}\left(c, -1 + c, 1\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{-1 - \mathsf{fma}\left(\frac{\frac{\sqrt{\mathsf{fma}\left(-2, cosTheta, 1\right)}}{cosTheta}}{\sqrt{\pi}}, e^{-cosTheta \cdot cosTheta}, c\right)}\\ } \end{array}} \]
  4. Simplified0.1

    \[\leadsto \color{blue}{\begin{array}{l} \color{blue}{\mathbf{if}\;cosTheta \cdot \mathsf{fma}\left(c, -1 + c, 1\right) \ne 0:\\ \;\;\;\;\frac{cosTheta \cdot \mathsf{fma}\left(c, -1 + c, 1\right)}{\mathsf{fma}\left(\frac{\frac{\sqrt{\mathsf{fma}\left(-2, cosTheta, 1\right)}}{e^{cosTheta \cdot cosTheta}}}{\sqrt{\pi}}, \mathsf{fma}\left(c, -1 + c, 1\right), cosTheta \cdot \left(1 + {c}^{3}\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{-1 - \mathsf{fma}\left(\frac{\frac{\sqrt{\mathsf{fma}\left(-2, cosTheta, 1\right)}}{cosTheta}}{\sqrt{\pi}}, e^{-cosTheta \cdot cosTheta}, c\right)}\\ } \end{array}} \]
    Proof

Alternatives

Alternative 1
Error0.3
Cost26816
\[\frac{1}{\left(1 + c\right) + \frac{\frac{\sqrt{1 - \left(cosTheta + cosTheta\right)}}{\sqrt{\pi}}}{cosTheta} \cdot e^{\left(-cosTheta\right) \cdot cosTheta}} \]
Alternative 2
Error0.6
Cost26752
\[\frac{-1}{-1 - \left(c + \frac{\frac{\frac{\sqrt{1 - \left(cosTheta + cosTheta\right)}}{cosTheta}}{e^{cosTheta \cdot cosTheta}}}{\sqrt{\pi}}\right)} \]
Alternative 3
Error0.6
Cost26624
\[\frac{1}{\frac{\sqrt{1 - \left(cosTheta + cosTheta\right)}}{\sqrt{\pi} \cdot \left(e^{cosTheta \cdot cosTheta} \cdot cosTheta\right)} + 1} \]
Alternative 4
Error0.8
Cost20608
\[\frac{-1}{-1 - \left(c + \frac{-e^{-cosTheta \cdot cosTheta}}{\sqrt{\pi}} \cdot \left(\frac{cosTheta + -1}{cosTheta} + 0.5 \cdot cosTheta\right)\right)} \]
Alternative 5
Error0.9
Cost20480
\[\frac{-1}{-1 - \left(c + \frac{-0.5 \cdot cosTheta - \left(1 - \frac{1}{cosTheta}\right)}{\sqrt{\pi} \cdot e^{cosTheta \cdot cosTheta}}\right)} \]
Alternative 6
Error0.9
Cost20480
\[\frac{-1}{-1 - \left(c + \frac{\frac{\left(-0.5 \cdot cosTheta + \frac{1}{cosTheta}\right) - 1}{e^{cosTheta \cdot cosTheta}}}{\sqrt{\pi}}\right)} \]
Alternative 7
Error1.0
Cost20416
\[\frac{1}{\left(1 + c\right) + \left(\left(\frac{1}{cosTheta} - 1\right) \cdot \frac{1}{\sqrt{\pi}}\right) \cdot e^{\left(-cosTheta\right) \cdot cosTheta}} \]
Alternative 8
Error1.2
Cost20224
\[\frac{-1}{-1 - \left(c + \frac{\frac{\frac{1}{cosTheta} - 1}{e^{cosTheta \cdot cosTheta}}}{\sqrt{\pi}}\right)} \]
Alternative 9
Error1.6
Cost13312
\[\frac{1}{\frac{\frac{1}{\sqrt{\pi}} + cosTheta}{cosTheta}} \]
Alternative 10
Error1.8
Cost12928
\[\sqrt{\pi} \cdot cosTheta \]
Alternative 11
Error60.6
Cost256
\[\left(-c\right) + 1 \]
Alternative 12
Error60.6
Cost64
\[1 \]

Error

Reproduce

herbie shell --seed 2023010 
(FPCore (cosTheta c)
  :name "Beckmann Sample, normalization factor"
  :precision binary64
  :pre (and (and (< 0.0 cosTheta) (< cosTheta 0.9999)) (and (< -1.0 c) (< c 1.0)))
  (/ 1.0 (+ (+ 1.0 c) (* (* (/ 1.0 (sqrt PI)) (/ (sqrt (- (- 1.0 cosTheta) cosTheta)) cosTheta)) (exp (* (- cosTheta) cosTheta))))))