?

Average Error: 0.4 → 0.4
Time: 2.3min
Precision: binary64
Cost: 33600

?

\[\left(0 \leq cosTheta \land cosTheta \leq 1\right) \land \left(0.0001 \leq \alpha \land \alpha \leq 1\right)\]
\[\frac{\alpha \cdot \alpha - 1}{\left(\pi \cdot \log \left(\alpha \cdot \alpha\right)\right) \cdot \left(1 + \left(\left(\alpha \cdot \alpha - 1\right) \cdot cosTheta\right) \cdot cosTheta\right)} \]
\[\frac{\mathsf{fma}\left(\alpha, \alpha, -1\right)}{2 \cdot \left(\left(\left(cosTheta \cdot cosTheta\right) \cdot \log \alpha\right) \cdot \left(\left(\alpha \cdot \alpha\right) \cdot \pi\right) + \left(\log \alpha \cdot \left(1 - cosTheta \cdot cosTheta\right)\right) \cdot \pi\right)} \]
(FPCore (cosTheta alpha)
 :precision binary64
 (/
  (- (* alpha alpha) 1.0)
  (*
   (* PI (log (* alpha alpha)))
   (+ 1.0 (* (* (- (* alpha alpha) 1.0) cosTheta) cosTheta)))))
(FPCore (cosTheta alpha)
 :precision binary64
 (/
  (fma alpha alpha -1.0)
  (*
   2.0
   (+
    (* (* (* cosTheta cosTheta) (log alpha)) (* (* alpha alpha) PI))
    (* (* (log alpha) (- 1.0 (* cosTheta cosTheta))) PI)))))
double code(double cosTheta, double alpha) {
	return ((alpha * alpha) - 1.0) / ((((double) M_PI) * log((alpha * alpha))) * (1.0 + ((((alpha * alpha) - 1.0) * cosTheta) * cosTheta)));
}
double code(double cosTheta, double alpha) {
	return fma(alpha, alpha, -1.0) / (2.0 * ((((cosTheta * cosTheta) * log(alpha)) * ((alpha * alpha) * ((double) M_PI))) + ((log(alpha) * (1.0 - (cosTheta * cosTheta))) * ((double) M_PI))));
}
function code(cosTheta, alpha)
	return Float64(Float64(Float64(alpha * alpha) - 1.0) / Float64(Float64(pi * log(Float64(alpha * alpha))) * Float64(1.0 + Float64(Float64(Float64(Float64(alpha * alpha) - 1.0) * cosTheta) * cosTheta))))
end
function code(cosTheta, alpha)
	return Float64(fma(alpha, alpha, -1.0) / Float64(2.0 * Float64(Float64(Float64(Float64(cosTheta * cosTheta) * log(alpha)) * Float64(Float64(alpha * alpha) * pi)) + Float64(Float64(log(alpha) * Float64(1.0 - Float64(cosTheta * cosTheta))) * pi))))
end
code[cosTheta_, alpha_] := N[(N[(N[(alpha * alpha), $MachinePrecision] - 1.0), $MachinePrecision] / N[(N[(Pi * N[Log[N[(alpha * alpha), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[(1.0 + N[(N[(N[(N[(alpha * alpha), $MachinePrecision] - 1.0), $MachinePrecision] * cosTheta), $MachinePrecision] * cosTheta), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[cosTheta_, alpha_] := N[(N[(alpha * alpha + -1.0), $MachinePrecision] / N[(2.0 * N[(N[(N[(N[(cosTheta * cosTheta), $MachinePrecision] * N[Log[alpha], $MachinePrecision]), $MachinePrecision] * N[(N[(alpha * alpha), $MachinePrecision] * Pi), $MachinePrecision]), $MachinePrecision] + N[(N[(N[Log[alpha], $MachinePrecision] * N[(1.0 - N[(cosTheta * cosTheta), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\frac{\alpha \cdot \alpha - 1}{\left(\pi \cdot \log \left(\alpha \cdot \alpha\right)\right) \cdot \left(1 + \left(\left(\alpha \cdot \alpha - 1\right) \cdot cosTheta\right) \cdot cosTheta\right)}
\frac{\mathsf{fma}\left(\alpha, \alpha, -1\right)}{2 \cdot \left(\left(\left(cosTheta \cdot cosTheta\right) \cdot \log \alpha\right) \cdot \left(\left(\alpha \cdot \alpha\right) \cdot \pi\right) + \left(\log \alpha \cdot \left(1 - cosTheta \cdot cosTheta\right)\right) \cdot \pi\right)}

Error?

Derivation?

  1. Initial program 0.4

    \[\frac{\alpha \cdot \alpha - 1}{\left(\pi \cdot \log \left(\alpha \cdot \alpha\right)\right) \cdot \left(1 + \left(\left(\alpha \cdot \alpha - 1\right) \cdot cosTheta\right) \cdot cosTheta\right)} \]
  2. Simplified0.5

    \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\alpha, \alpha, -1\right)}{\left(\mathsf{fma}\left(\mathsf{fma}\left(\alpha, \alpha, -1\right) \cdot cosTheta, cosTheta, 1\right) \cdot \log \left({\alpha}^{2}\right)\right) \cdot \pi}} \]
    Proof
  3. Taylor expanded in alpha around 0 0.4

    \[\leadsto \frac{\mathsf{fma}\left(\alpha, \alpha, -1\right)}{\color{blue}{2 \cdot \left({cosTheta}^{2} \cdot \left(\log \alpha \cdot \left({\alpha}^{2} \cdot \pi\right)\right)\right) + 2 \cdot \left(\log \alpha \cdot \left(\left(1 + -1 \cdot {cosTheta}^{2}\right) \cdot \pi\right)\right)}} \]
  4. Simplified0.4

    \[\leadsto \frac{\mathsf{fma}\left(\alpha, \alpha, -1\right)}{\color{blue}{2 \cdot \left(\left(\left(cosTheta \cdot cosTheta\right) \cdot \log \alpha\right) \cdot \left(\left(\alpha \cdot \alpha\right) \cdot \pi\right) + \left(\log \alpha \cdot \left(1 - cosTheta \cdot cosTheta\right)\right) \cdot \pi\right)}} \]
    Proof

Alternatives

Alternative 1
Error0.4
Cost14208
\[\begin{array}{l} t_0 := \alpha \cdot \alpha - 1\\ \frac{t_0}{\left(\pi \cdot \log \left(\alpha \cdot \alpha\right)\right) \cdot \left(1 + \left(t_0 \cdot cosTheta\right) \cdot cosTheta\right)} \end{array} \]
Alternative 2
Error0.8
Cost13888
\[\frac{\alpha \cdot \alpha - 1}{\left(\pi \cdot \log \left(\alpha \cdot \alpha\right)\right) \cdot \left(1 + \left(-cosTheta\right) \cdot cosTheta\right)} \]
Alternative 3
Error1.1
Cost13440
\[-0.5 \cdot \frac{1 - \alpha \cdot \alpha}{\log \alpha \cdot \pi} \]
Alternative 4
Error39.3
Cost13312
\[1 - \left(1 + \frac{\frac{0.5}{\pi}}{\log \alpha}\right) \]
Alternative 5
Error39.3
Cost13312
\[1 - \left(1 + \frac{\frac{0.5}{\log \alpha}}{\pi}\right) \]
Alternative 6
Error39.3
Cost13312
\[3 - \left(3 + \frac{\frac{0.5}{\pi}}{\log \alpha}\right) \]
Alternative 7
Error39.3
Cost13056
\[\frac{-0.5}{\log \alpha \cdot \pi} \]

Error

Reproduce?

herbie shell --seed 2023033 
(FPCore (cosTheta alpha)
  :name "GTR1 distribution"
  :precision binary64
  :pre (and (and (<= 0.0 cosTheta) (<= cosTheta 1.0)) (and (<= 0.0001 alpha) (<= alpha 1.0)))
  (/ (- (* alpha alpha) 1.0) (* (* PI (log (* alpha alpha))) (+ 1.0 (* (* (- (* alpha alpha) 1.0) cosTheta) cosTheta)))))