Average Error: 12.5 → 0.6
Time: 27.9s
Precision: binary64
Cost: 40640
\[\left(\left(2.328306437 \cdot 10^{-10} \leq ux \land ux \leq 1\right) \land \left(2.328306437 \cdot 10^{-10} \leq uy \land uy \leq 1\right)\right) \land \left(0 \leq maxCos \land maxCos \leq 1\right)\]
\[\sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{1 - \left(\left(1 - ux\right) + ux \cdot maxCos\right) \cdot \left(\left(1 - ux\right) + ux \cdot maxCos\right)} \]
\[\sin \left(\left(\sqrt{2} \cdot \pi\right) \cdot \left(uy \cdot \sqrt{2}\right)\right) \cdot \sqrt{\left(maxCos - 1\right) \cdot \left({\left(\frac{-1}{ux}\right)}^{-2} \cdot \left(1 + -1 \cdot maxCos\right)\right) + ux \cdot \left(1 + \left(-1 \cdot maxCos + -1 \cdot \left(maxCos - 1\right)\right)\right)} \]
(FPCore (ux uy maxCos)
 :precision binary64
 (*
  (sin (* (* uy 2.0) PI))
  (sqrt
   (- 1.0 (* (+ (- 1.0 ux) (* ux maxCos)) (+ (- 1.0 ux) (* ux maxCos)))))))
(FPCore (ux uy maxCos)
 :precision binary64
 (*
  (sin (* (* (sqrt 2.0) PI) (* uy (sqrt 2.0))))
  (sqrt
   (+
    (* (- maxCos 1.0) (* (pow (/ -1.0 ux) -2.0) (+ 1.0 (* -1.0 maxCos))))
    (* ux (+ 1.0 (+ (* -1.0 maxCos) (* -1.0 (- maxCos 1.0)))))))))
double code(double ux, double uy, double maxCos) {
	return sin(((uy * 2.0) * ((double) M_PI))) * sqrt((1.0 - (((1.0 - ux) + (ux * maxCos)) * ((1.0 - ux) + (ux * maxCos)))));
}
double code(double ux, double uy, double maxCos) {
	return sin(((sqrt(2.0) * ((double) M_PI)) * (uy * sqrt(2.0)))) * sqrt((((maxCos - 1.0) * (pow((-1.0 / ux), -2.0) * (1.0 + (-1.0 * maxCos)))) + (ux * (1.0 + ((-1.0 * maxCos) + (-1.0 * (maxCos - 1.0)))))));
}
public static double code(double ux, double uy, double maxCos) {
	return Math.sin(((uy * 2.0) * Math.PI)) * Math.sqrt((1.0 - (((1.0 - ux) + (ux * maxCos)) * ((1.0 - ux) + (ux * maxCos)))));
}
public static double code(double ux, double uy, double maxCos) {
	return Math.sin(((Math.sqrt(2.0) * Math.PI) * (uy * Math.sqrt(2.0)))) * Math.sqrt((((maxCos - 1.0) * (Math.pow((-1.0 / ux), -2.0) * (1.0 + (-1.0 * maxCos)))) + (ux * (1.0 + ((-1.0 * maxCos) + (-1.0 * (maxCos - 1.0)))))));
}
def code(ux, uy, maxCos):
	return math.sin(((uy * 2.0) * math.pi)) * math.sqrt((1.0 - (((1.0 - ux) + (ux * maxCos)) * ((1.0 - ux) + (ux * maxCos)))))
def code(ux, uy, maxCos):
	return math.sin(((math.sqrt(2.0) * math.pi) * (uy * math.sqrt(2.0)))) * math.sqrt((((maxCos - 1.0) * (math.pow((-1.0 / ux), -2.0) * (1.0 + (-1.0 * maxCos)))) + (ux * (1.0 + ((-1.0 * maxCos) + (-1.0 * (maxCos - 1.0)))))))
function code(ux, uy, maxCos)
	return Float64(sin(Float64(Float64(uy * 2.0) * pi)) * sqrt(Float64(1.0 - Float64(Float64(Float64(1.0 - ux) + Float64(ux * maxCos)) * Float64(Float64(1.0 - ux) + Float64(ux * maxCos))))))
end
function code(ux, uy, maxCos)
	return Float64(sin(Float64(Float64(sqrt(2.0) * pi) * Float64(uy * sqrt(2.0)))) * sqrt(Float64(Float64(Float64(maxCos - 1.0) * Float64((Float64(-1.0 / ux) ^ -2.0) * Float64(1.0 + Float64(-1.0 * maxCos)))) + Float64(ux * Float64(1.0 + Float64(Float64(-1.0 * maxCos) + Float64(-1.0 * Float64(maxCos - 1.0))))))))
end
function tmp = code(ux, uy, maxCos)
	tmp = sin(((uy * 2.0) * pi)) * sqrt((1.0 - (((1.0 - ux) + (ux * maxCos)) * ((1.0 - ux) + (ux * maxCos)))));
end
function tmp = code(ux, uy, maxCos)
	tmp = sin(((sqrt(2.0) * pi) * (uy * sqrt(2.0)))) * sqrt((((maxCos - 1.0) * (((-1.0 / ux) ^ -2.0) * (1.0 + (-1.0 * maxCos)))) + (ux * (1.0 + ((-1.0 * maxCos) + (-1.0 * (maxCos - 1.0)))))));
end
code[ux_, uy_, maxCos_] := N[(N[Sin[N[(N[(uy * 2.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision] * N[Sqrt[N[(1.0 - N[(N[(N[(1.0 - ux), $MachinePrecision] + N[(ux * maxCos), $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 - ux), $MachinePrecision] + N[(ux * maxCos), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
code[ux_, uy_, maxCos_] := N[(N[Sin[N[(N[(N[Sqrt[2.0], $MachinePrecision] * Pi), $MachinePrecision] * N[(uy * N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * N[Sqrt[N[(N[(N[(maxCos - 1.0), $MachinePrecision] * N[(N[Power[N[(-1.0 / ux), $MachinePrecision], -2.0], $MachinePrecision] * N[(1.0 + N[(-1.0 * maxCos), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(ux * N[(1.0 + N[(N[(-1.0 * maxCos), $MachinePrecision] + N[(-1.0 * N[(maxCos - 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{1 - \left(\left(1 - ux\right) + ux \cdot maxCos\right) \cdot \left(\left(1 - ux\right) + ux \cdot maxCos\right)}
\sin \left(\left(\sqrt{2} \cdot \pi\right) \cdot \left(uy \cdot \sqrt{2}\right)\right) \cdot \sqrt{\left(maxCos - 1\right) \cdot \left({\left(\frac{-1}{ux}\right)}^{-2} \cdot \left(1 + -1 \cdot maxCos\right)\right) + ux \cdot \left(1 + \left(-1 \cdot maxCos + -1 \cdot \left(maxCos - 1\right)\right)\right)}

Error

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 12.5

    \[\sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{1 - \left(\left(1 - ux\right) + ux \cdot maxCos\right) \cdot \left(\left(1 - ux\right) + ux \cdot maxCos\right)} \]
  2. Applied egg-rr11.9

    \[\leadsto \sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{1 - \color{blue}{\left(\left(\mathsf{fma}\left(maxCos, ux, 1\right) - ux\right) + \left(\mathsf{fma}\left(maxCos, ux, 1\right) - ux\right) \cdot \left(ux \cdot \left(maxCos - 1\right)\right)\right)}} \]
  3. Simplified12.5

    \[\leadsto \sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{1 - \color{blue}{\left(ux \cdot \left(maxCos + -1\right) + 1\right) \cdot \left(\mathsf{fma}\left(maxCos, ux, 1\right) - ux\right)}} \]
    Proof
  4. Taylor expanded in ux around -inf 0.5

    \[\leadsto \sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{\color{blue}{\left(maxCos - 1\right) \cdot \left({\left(\frac{-1}{ux}\right)}^{-2} \cdot \left(1 + -1 \cdot maxCos\right)\right) + ux \cdot \left(1 + \left(-1 \cdot maxCos + -1 \cdot \left(maxCos - 1\right)\right)\right)}} \]
  5. Applied egg-rr0.6

    \[\leadsto \sin \color{blue}{\left(\left(\sqrt{2} \cdot \pi\right) \cdot \left(uy \cdot \sqrt{2}\right)\right)} \cdot \sqrt{\left(maxCos - 1\right) \cdot \left({\left(\frac{-1}{ux}\right)}^{-2} \cdot \left(1 + -1 \cdot maxCos\right)\right) + ux \cdot \left(1 + \left(-1 \cdot maxCos + -1 \cdot \left(maxCos - 1\right)\right)\right)} \]

Alternatives

Alternative 1
Error0.5
Cost40576
\[\sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{\left(maxCos - 1\right) \cdot \left({\left(\sqrt[3]{{\left(\frac{-1}{ux}\right)}^{-2}}\right)}^{3} \cdot \left(1 + -1 \cdot maxCos\right)\right) + ux \cdot \left(1 + \left(-1 \cdot maxCos + -1 \cdot \left(maxCos - 1\right)\right)\right)} \]
Alternative 2
Error0.5
Cost20352
\[\sin \left(2 \cdot \left(uy \cdot \pi\right)\right) \cdot \sqrt{\left(ux - maxCos \cdot ux\right) \cdot \left(2 + \left(maxCos - 1\right) \cdot ux\right)} \]
Alternative 3
Error1.8
Cost19904
\[\sqrt{\left(\left(-ux\right) + 2\right) \cdot ux} \cdot \sin \left(\left(2 \cdot uy\right) \cdot \pi\right) \]
Alternative 4
Error53.0
Cost14144
\[2 \cdot \left(\sqrt{\left(-ux \cdot ux\right) \cdot {\left(maxCos + -1\right)}^{2} + ux \cdot \left(2 + -2 \cdot maxCos\right)} \cdot uy\right) \]
Alternative 5
Error53.6
Cost6720
\[uy \cdot \sqrt{ux + ux} \]

Error

Reproduce

herbie shell --seed 2023010 
(FPCore (ux uy maxCos)
  :name "UniformSampleCone, y"
  :precision binary64
  :pre (and (and (and (<= 2.328306437e-10 ux) (<= ux 1.0)) (and (<= 2.328306437e-10 uy) (<= uy 1.0))) (and (<= 0.0 maxCos) (<= maxCos 1.0)))
  (* (sin (* (* uy 2.0) PI)) (sqrt (- 1.0 (* (+ (- 1.0 ux) (* ux maxCos)) (+ (- 1.0 ux) (* ux maxCos)))))))