UniformSampleCone, y

?

Percentage Accurate: 58.0% → 98.4%
Time: 25.3s
Precision: binary32
Cost: 19872

?

\[\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)} \]
\[\begin{array}{l} t_0 := ux \cdot \left(1 - maxCos\right)\\ \sqrt[3]{{\left(2 \cdot t_0 - {t_0}^{2}\right)}^{1.5} \cdot {\sin \left(uy \cdot \left(2 \cdot \pi\right)\right)}^{3}} \end{array} \]
(FPCore (ux uy maxCos)
 :precision binary32
 (*
  (sin (* (* uy 2.0) PI))
  (sqrt
   (- 1.0 (* (+ (- 1.0 ux) (* ux maxCos)) (+ (- 1.0 ux) (* ux maxCos)))))))
(FPCore (ux uy maxCos)
 :precision binary32
 (let* ((t_0 (* ux (- 1.0 maxCos))))
   (cbrt
    (*
     (pow (- (* 2.0 t_0) (pow t_0 2.0)) 1.5)
     (pow (sin (* uy (* 2.0 PI))) 3.0)))))
float code(float ux, float uy, float maxCos) {
	return sinf(((uy * 2.0f) * ((float) M_PI))) * sqrtf((1.0f - (((1.0f - ux) + (ux * maxCos)) * ((1.0f - ux) + (ux * maxCos)))));
}
float code(float ux, float uy, float maxCos) {
	float t_0 = ux * (1.0f - maxCos);
	return cbrtf((powf(((2.0f * t_0) - powf(t_0, 2.0f)), 1.5f) * powf(sinf((uy * (2.0f * ((float) M_PI)))), 3.0f)));
}
function code(ux, uy, maxCos)
	return Float32(sin(Float32(Float32(uy * Float32(2.0)) * Float32(pi))) * sqrt(Float32(Float32(1.0) - Float32(Float32(Float32(Float32(1.0) - ux) + Float32(ux * maxCos)) * Float32(Float32(Float32(1.0) - ux) + Float32(ux * maxCos))))))
end
function code(ux, uy, maxCos)
	t_0 = Float32(ux * Float32(Float32(1.0) - maxCos))
	return cbrt(Float32((Float32(Float32(Float32(2.0) * t_0) - (t_0 ^ Float32(2.0))) ^ Float32(1.5)) * (sin(Float32(uy * Float32(Float32(2.0) * Float32(pi)))) ^ Float32(3.0))))
end
\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)}
\begin{array}{l}
t_0 := ux \cdot \left(1 - maxCos\right)\\
\sqrt[3]{{\left(2 \cdot t_0 - {t_0}^{2}\right)}^{1.5} \cdot {\sin \left(uy \cdot \left(2 \cdot \pi\right)\right)}^{3}}
\end{array}

Local Percentage Accuracy?

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.

Herbie found 15 alternatives:

AlternativeAccuracySpeedup

Accuracy vs Speed

The accuracy (vertical axis) and speed (horizontal axis) of each of Herbie's proposed alternatives. Up and to the right is better. Each dot represents an alternative program; the red square represents the initial program.

Bogosity?

Bogosity

Try it out?

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation?

  1. Initial program 56.0%

    \[\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. Simplified55.8%

    \[\leadsto \color{blue}{\sin \left(uy \cdot \left(2 \cdot \pi\right)\right) \cdot \sqrt{\mathsf{fma}\left(\mathsf{fma}\left(ux, maxCos, 1\right) - ux, ux - \mathsf{fma}\left(ux, maxCos, 1\right), 1\right)}} \]
    Step-by-step derivation

    [Start]56.0

    \[ \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)} \]

    associate-*l* [=>]56.0

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

    sub-neg [=>]56.0

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

    +-commutative [=>]56.0

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

    distribute-rgt-neg-in [=>]56.0

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

    fma-def [=>]56.0

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

    +-commutative [=>]56.0

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

    associate-+r- [=>]56.1

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

    fma-def [=>]56.1

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

    neg-sub0 [=>]56.1

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

    +-commutative [=>]56.1

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

    associate-+r- [=>]55.8

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

    associate--r- [=>]55.8

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

    neg-sub0 [<=]55.8

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

    +-commutative [=>]55.8

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

    sub-neg [<=]55.8

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

    fma-def [=>]55.8

    \[ \sin \left(uy \cdot \left(2 \cdot \pi\right)\right) \cdot \sqrt{\mathsf{fma}\left(\mathsf{fma}\left(ux, maxCos, 1\right) - ux, ux - \color{blue}{\mathsf{fma}\left(ux, maxCos, 1\right)}, 1\right)} \]
  3. Taylor expanded in ux around -inf 98.3%

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

    \[\leadsto \sin \left(uy \cdot \left(2 \cdot \pi\right)\right) \cdot \sqrt{\color{blue}{ux \cdot \left(\left(1 - maxCos\right) \cdot 2\right) - \left(ux \cdot ux\right) \cdot {\left(1 - maxCos\right)}^{2}}} \]
    Step-by-step derivation

    [Start]98.3

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

    +-commutative [=>]98.3

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

    mul-1-neg [=>]98.3

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

    unsub-neg [=>]98.3

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

    *-commutative [=>]98.3

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

    mul-1-neg [=>]98.3

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

    sub-neg [<=]98.3

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

    associate-*l* [=>]98.3

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

    unpow2 [=>]98.3

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

    mul-1-neg [=>]98.3

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

    sub-neg [<=]98.3

    \[ \sin \left(uy \cdot \left(2 \cdot \pi\right)\right) \cdot \sqrt{ux \cdot \left(\left(1 - maxCos\right) \cdot 2\right) - \left(ux \cdot ux\right) \cdot {\color{blue}{\left(1 - maxCos\right)}}^{2}} \]
  5. Applied egg-rr98.4%

    \[\leadsto \color{blue}{\sqrt[3]{{\left(2 \cdot \left(ux \cdot \left(1 - maxCos\right)\right) - {\left(ux \cdot \left(1 - maxCos\right)\right)}^{2}\right)}^{1.5} \cdot {\sin \left(uy \cdot \left(2 \cdot \pi\right)\right)}^{3}}} \]
    Step-by-step derivation

    [Start]98.3

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

    *-commutative [=>]98.3

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

    add-cbrt-cube [=>]98.3

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

    add-cbrt-cube [=>]98.3

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

    cbrt-unprod [=>]98.1

    \[ \color{blue}{\sqrt[3]{\left(\left(\sqrt{ux \cdot \left(\left(1 - maxCos\right) \cdot 2\right) - \left(ux \cdot ux\right) \cdot {\left(1 - maxCos\right)}^{2}} \cdot \sqrt{ux \cdot \left(\left(1 - maxCos\right) \cdot 2\right) - \left(ux \cdot ux\right) \cdot {\left(1 - maxCos\right)}^{2}}\right) \cdot \sqrt{ux \cdot \left(\left(1 - maxCos\right) \cdot 2\right) - \left(ux \cdot ux\right) \cdot {\left(1 - maxCos\right)}^{2}}\right) \cdot \left(\left(\sin \left(uy \cdot \left(2 \cdot \pi\right)\right) \cdot \sin \left(uy \cdot \left(2 \cdot \pi\right)\right)\right) \cdot \sin \left(uy \cdot \left(2 \cdot \pi\right)\right)\right)}} \]
  6. Final simplification98.4%

    \[\leadsto \sqrt[3]{{\left(2 \cdot \left(ux \cdot \left(1 - maxCos\right)\right) - {\left(ux \cdot \left(1 - maxCos\right)\right)}^{2}\right)}^{1.5} \cdot {\sin \left(uy \cdot \left(2 \cdot \pi\right)\right)}^{3}} \]

Alternatives

Alternative 1
Accuracy98.4%
Cost16640
\[\begin{array}{l} t_0 := ux \cdot \left(1 - maxCos\right)\\ \sqrt[3]{{\sin \left(2 \cdot \left(uy \cdot \pi\right)\right)}^{3} \cdot {\left(t_0 \cdot \left(2 - t_0\right)\right)}^{1.5}} \end{array} \]
Alternative 2
Accuracy98.4%
Cost10176
\[\sin \left(\pi \cdot \left(2 \cdot uy\right)\right) \cdot \sqrt{ux \cdot \left(\left(1 - maxCos\right) \cdot \left(2 - ux \cdot \left(1 - maxCos\right)\right)\right)} \]
Alternative 3
Accuracy98.4%
Cost10176
\[\begin{array}{l} t_0 := ux \cdot \left(1 - maxCos\right)\\ \sin \left(2 \cdot \left(uy \cdot \pi\right)\right) \cdot \sqrt{t_0 \cdot \left(2 - t_0\right)} \end{array} \]
Alternative 4
Accuracy98.4%
Cost10176
\[\sin \left(2 \cdot \left(uy \cdot \pi\right)\right) \cdot \sqrt{\left(1 - maxCos\right) \cdot \left(ux \cdot \left(2 - ux \cdot \left(1 - maxCos\right)\right)\right)} \]
Alternative 5
Accuracy96.7%
Cost10112
\[\sin \left(uy \cdot \left(2 \cdot \pi\right)\right) \cdot \sqrt{ux \cdot \left(2 \cdot \left(1 - maxCos\right)\right) - ux \cdot ux} \]
Alternative 6
Accuracy95.9%
Cost10052
\[\begin{array}{l} t_0 := 2 \cdot \left(uy \cdot \pi\right)\\ t_1 := ux \cdot \left(1 - maxCos\right)\\ \mathbf{if}\;2 \cdot uy \leq 0.0003699999942909926:\\ \;\;\;\;t_0 \cdot \sqrt{t_1 \cdot \left(2 - t_1\right)}\\ \mathbf{else}:\\ \;\;\;\;\sin t_0 \cdot \sqrt{ux \cdot \left(2 - ux\right)}\\ \end{array} \]
Alternative 7
Accuracy89.6%
Cost9988
\[\begin{array}{l} t_0 := 2 \cdot \left(uy \cdot \pi\right)\\ t_1 := ux \cdot \left(1 - maxCos\right)\\ \mathbf{if}\;2 \cdot uy \leq 0.005900000222027302:\\ \;\;\;\;t_0 \cdot \sqrt{t_1 \cdot \left(2 - t_1\right)}\\ \mathbf{else}:\\ \;\;\;\;\sin t_0 \cdot \sqrt{2 \cdot ux}\\ \end{array} \]
Alternative 8
Accuracy81.4%
Cost6976
\[\begin{array}{l} t_0 := ux \cdot \left(1 - maxCos\right)\\ 2 \cdot \left(uy \cdot \left(\pi \cdot \sqrt{t_0 \cdot \left(2 - t_0\right)}\right)\right) \end{array} \]
Alternative 9
Accuracy81.4%
Cost6976
\[2 \cdot \left(\left(uy \cdot \pi\right) \cdot \sqrt{\left(1 - maxCos\right) \cdot \left(ux \cdot \left(2 - ux \cdot \left(1 - maxCos\right)\right)\right)}\right) \]
Alternative 10
Accuracy81.4%
Cost6976
\[\begin{array}{l} t_0 := ux \cdot \left(1 - maxCos\right)\\ \left(2 \cdot \left(uy \cdot \pi\right)\right) \cdot \sqrt{t_0 \cdot \left(2 - t_0\right)} \end{array} \]
Alternative 11
Accuracy77.1%
Cost6784
\[2 \cdot \left(uy \cdot \left(\pi \cdot \sqrt{2 \cdot ux - ux \cdot ux}\right)\right) \]
Alternative 12
Accuracy77.1%
Cost6720
\[2 \cdot \left(uy \cdot \left(\pi \cdot \sqrt{ux \cdot \left(2 - ux\right)}\right)\right) \]
Alternative 13
Accuracy63.1%
Cost6656
\[2 \cdot \left(uy \cdot \left(\pi \cdot \sqrt{2 \cdot ux}\right)\right) \]
Alternative 14
Accuracy7.1%
Cost32
\[0 \]

Reproduce?

herbie shell --seed 2023161 
(FPCore (ux uy maxCos)
  :name "UniformSampleCone, y"
  :precision binary32
  :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)))))))