Average Error: 13.5 → 0.6
Time: 12.0s
Precision: binary32
Cost: 19552
\[\left(\left(cosTheta_i > 0.9999 \land cosTheta_i \leq 1\right) \land \left(2.328306437 \cdot 10^{-10} \leq u1 \land u1 \leq 1\right)\right) \land \left(2.328306437 \cdot 10^{-10} \leq u2 \land u2 \leq 1\right)\]
\[\sqrt{-\log \left(1 - u1\right)} \cdot \sin \left(\left(2 \cdot \pi\right) \cdot u2\right) \]
\[\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \left(\left(\sin \left(\pi \cdot u2\right) \cdot \cos \left(\pi \cdot u2\right)\right) \cdot 2\right) \]
(FPCore (cosTheta_i u1 u2)
 :precision binary32
 (* (sqrt (- (log (- 1.0 u1)))) (sin (* (* 2.0 PI) u2))))
(FPCore (cosTheta_i u1 u2)
 :precision binary32
 (* (sqrt (- (log1p (- u1)))) (* (* (sin (* PI u2)) (cos (* PI u2))) 2.0)))
float code(float cosTheta_i, float u1, float u2) {
	return sqrtf(-logf((1.0f - u1))) * sinf(((2.0f * ((float) M_PI)) * u2));
}
float code(float cosTheta_i, float u1, float u2) {
	return sqrtf(-log1pf(-u1)) * ((sinf((((float) M_PI) * u2)) * cosf((((float) M_PI) * u2))) * 2.0f);
}
function code(cosTheta_i, u1, u2)
	return Float32(sqrt(Float32(-log(Float32(Float32(1.0) - u1)))) * sin(Float32(Float32(Float32(2.0) * Float32(pi)) * u2)))
end
function code(cosTheta_i, u1, u2)
	return Float32(sqrt(Float32(-log1p(Float32(-u1)))) * Float32(Float32(sin(Float32(Float32(pi) * u2)) * cos(Float32(Float32(pi) * u2))) * Float32(2.0)))
end
\sqrt{-\log \left(1 - u1\right)} \cdot \sin \left(\left(2 \cdot \pi\right) \cdot u2\right)
\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \left(\left(\sin \left(\pi \cdot u2\right) \cdot \cos \left(\pi \cdot u2\right)\right) \cdot 2\right)

Error

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 13.5

    \[\sqrt{-\log \left(1 - u1\right)} \cdot \sin \left(\left(2 \cdot \pi\right) \cdot u2\right) \]
  2. Simplified0.5

    \[\leadsto \color{blue}{\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \sin \left(2 \cdot \left(\pi \cdot u2\right)\right)} \]
    Proof
    (*.f32 (sqrt.f32 (neg.f32 (log1p.f32 (neg.f32 u1)))) (sin.f32 (*.f32 2 (*.f32 (PI.f32) u2)))): 0 points increase in error, 0 points decrease in error
    (*.f32 (sqrt.f32 (neg.f32 (Rewrite<= log1p-def_binary32 (log.f32 (+.f32 1 (neg.f32 u1)))))) (sin.f32 (*.f32 2 (*.f32 (PI.f32) u2)))): 229 points increase in error, 3 points decrease in error
    (*.f32 (sqrt.f32 (neg.f32 (log.f32 (Rewrite<= sub-neg_binary32 (-.f32 1 u1))))) (sin.f32 (*.f32 2 (*.f32 (PI.f32) u2)))): 0 points increase in error, 0 points decrease in error
    (*.f32 (sqrt.f32 (neg.f32 (log.f32 (-.f32 1 u1)))) (sin.f32 (Rewrite<= associate-*l*_binary32 (*.f32 (*.f32 2 (PI.f32)) u2)))): 0 points increase in error, 0 points decrease in error
  3. Applied egg-rr0.6

    \[\leadsto \sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \color{blue}{\left(\left(\sin \left(\pi \cdot u2\right) \cdot \cos \left(\pi \cdot u2\right)\right) \cdot 2\right)} \]
  4. Final simplification0.6

    \[\leadsto \sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \left(\left(\sin \left(\pi \cdot u2\right) \cdot \cos \left(\pi \cdot u2\right)\right) \cdot 2\right) \]

Alternatives

Alternative 1
Error2.0
Cost13348
\[\begin{array}{l} t_0 := u2 \cdot \left(\pi \cdot 2\right)\\ \mathbf{if}\;t_0 \leq 0.0006200000061653554:\\ \;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \left(\pi \cdot \left(u2 \cdot 2\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\sin t_0 \cdot \sqrt{u1 + u1 \cdot \left(u1 \cdot 0.5\right)}\\ \end{array} \]
Alternative 2
Error3.1
Cost13220
\[\begin{array}{l} t_0 := \pi \cdot \left(u2 \cdot 2\right)\\ \mathbf{if}\;u2 \cdot \left(\pi \cdot 2\right) \leq 0.010999999940395355:\\ \;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot t_0\\ \mathbf{else}:\\ \;\;\;\;\sin t_0 \cdot \sqrt{u1}\\ \end{array} \]
Alternative 3
Error0.5
Cost13056
\[\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \sin \left(\left(\pi \cdot u2\right) \cdot 2\right) \]
Alternative 4
Error1.6
Cost10180
\[\begin{array}{l} \mathbf{if}\;u1 \leq 0.029999999329447746:\\ \;\;\;\;\sqrt{u1 - \left(u1 \cdot u1\right) \cdot \left(-0.5 + u1 \cdot -0.3333333333333333\right)} \cdot \sin \left(u2 \cdot \left(\pi \cdot 2\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \left(\pi \cdot \left(u2 \cdot 2\right)\right)\\ \end{array} \]
Alternative 5
Error7.6
Cost9792
\[\sin \left(\pi \cdot \left(u2 \cdot 2\right)\right) \cdot \sqrt{u1} \]
Alternative 6
Error10.9
Cost6592
\[2 \cdot \left(u2 \cdot \left(\pi \cdot \sqrt{u1}\right)\right) \]
Alternative 7
Error10.9
Cost6592
\[2 \cdot \left(\pi \cdot \left(u2 \cdot \sqrt{u1}\right)\right) \]
Alternative 8
Error10.9
Cost6592
\[\left(\pi \cdot \left(u2 \cdot 2\right)\right) \cdot \sqrt{u1} \]

Error

Reproduce

herbie shell --seed 2022338 
(FPCore (cosTheta_i u1 u2)
  :name "Beckmann Sample, near normal, slope_y"
  :precision binary32
  :pre (and (and (and (> cosTheta_i 0.9999) (<= cosTheta_i 1.0)) (and (<= 2.328306437e-10 u1) (<= u1 1.0))) (and (<= 2.328306437e-10 u2) (<= u2 1.0)))
  (* (sqrt (- (log (- 1.0 u1)))) (sin (* (* 2.0 PI) u2))))