(FPCore (alphax alphay u0 cos2phi sin2phi) :precision binary32 (/ (- (log (- 1.0 u0))) (+ (/ cos2phi (* alphax alphax)) (/ sin2phi (* alphay alphay)))))
(FPCore (alphax alphay u0 cos2phi sin2phi) :precision binary32 (* (/ (- (log1p (- u0))) (fma sin2phi alphax (* (* alphay alphay) (/ cos2phi alphax)))) (* alphax (* alphay alphay))))
float code(float alphax, float alphay, float u0, float cos2phi, float sin2phi) {
return -logf((1.0f - u0)) / ((cos2phi / (alphax * alphax)) + (sin2phi / (alphay * alphay)));
}
float code(float alphax, float alphay, float u0, float cos2phi, float sin2phi) {
return (-log1pf(-u0) / fmaf(sin2phi, alphax, ((alphay * alphay) * (cos2phi / alphax)))) * (alphax * (alphay * alphay));
}
function code(alphax, alphay, u0, cos2phi, sin2phi) return Float32(Float32(-log(Float32(Float32(1.0) - u0))) / Float32(Float32(cos2phi / Float32(alphax * alphax)) + Float32(sin2phi / Float32(alphay * alphay)))) end
function code(alphax, alphay, u0, cos2phi, sin2phi) return Float32(Float32(Float32(-log1p(Float32(-u0))) / fma(sin2phi, alphax, Float32(Float32(alphay * alphay) * Float32(cos2phi / alphax)))) * Float32(alphax * Float32(alphay * alphay))) end
\frac{-\log \left(1 - u0\right)}{\frac{cos2phi}{alphax \cdot alphax} + \frac{sin2phi}{alphay \cdot alphay}}
\frac{-\mathsf{log1p}\left(-u0\right)}{\mathsf{fma}\left(sin2phi, alphax, \left(alphay \cdot alphay\right) \cdot \frac{cos2phi}{alphax}\right)} \cdot \left(alphax \cdot \left(alphay \cdot alphay\right)\right)



Bits error versus alphax



Bits error versus alphay



Bits error versus u0



Bits error versus cos2phi



Bits error versus sin2phi
Initial program 12.5
Simplified0.5
Applied associate-/r*_binary320.5
Applied frac-add_binary320.6
Applied associate-/r/_binary320.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2022131
(FPCore (alphax alphay u0 cos2phi sin2phi)
:name "Beckmann Distribution sample, tan2theta, alphax != alphay, u1 <= 0.5"
:precision binary32
:pre (and (and (and (and (and (<= 0.0001 alphax) (<= alphax 1.0)) (and (<= 0.0001 alphay) (<= alphay 1.0))) (and (<= 2.328306437e-10 u0) (<= u0 1.0))) (and (<= 0.0 cos2phi) (<= cos2phi 1.0))) (<= 0.0 sin2phi))
(/ (- (log (- 1.0 u0))) (+ (/ cos2phi (* alphax alphax)) (/ sin2phi (* alphay alphay)))))