Average Error: 0.0 → 0.0
Time: 2.4s
Precision: binary32
\[\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)\]
\[\left(1 - ux\right) + ux \cdot maxCos \]
\[ux \cdot \left(maxCos + -1\right) + 1 \]
(FPCore (ux uy maxCos) :precision binary32 (+ (- 1.0 ux) (* ux maxCos)))
(FPCore (ux uy maxCos) :precision binary32 (+ (* ux (+ maxCos -1.0)) 1.0))
float code(float ux, float uy, float maxCos) {
	return (1.0f - ux) + (ux * maxCos);
}
float code(float ux, float uy, float maxCos) {
	return (ux * (maxCos + -1.0f)) + 1.0f;
}
real(4) function code(ux, uy, maxcos)
    real(4), intent (in) :: ux
    real(4), intent (in) :: uy
    real(4), intent (in) :: maxcos
    code = (1.0e0 - ux) + (ux * maxcos)
end function
real(4) function code(ux, uy, maxcos)
    real(4), intent (in) :: ux
    real(4), intent (in) :: uy
    real(4), intent (in) :: maxcos
    code = (ux * (maxcos + (-1.0e0))) + 1.0e0
end function
function code(ux, uy, maxCos)
	return Float32(Float32(Float32(1.0) - ux) + Float32(ux * maxCos))
end
function code(ux, uy, maxCos)
	return Float32(Float32(ux * Float32(maxCos + Float32(-1.0))) + Float32(1.0))
end
function tmp = code(ux, uy, maxCos)
	tmp = (single(1.0) - ux) + (ux * maxCos);
end
function tmp = code(ux, uy, maxCos)
	tmp = (ux * (maxCos + single(-1.0))) + single(1.0);
end
\left(1 - ux\right) + ux \cdot maxCos
ux \cdot \left(maxCos + -1\right) + 1

Error

Bits error versus ux

Bits error versus uy

Bits error versus maxCos

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.0

    \[\left(1 - ux\right) + ux \cdot maxCos \]
  2. Taylor expanded in ux around 0 0.1

    \[\leadsto \color{blue}{\left(1 + maxCos \cdot ux\right) - ux} \]
  3. Simplified0.0

    \[\leadsto \color{blue}{\mathsf{fma}\left(ux, maxCos + -1, 1\right)} \]
  4. Applied egg-rr0.0

    \[\leadsto \color{blue}{ux \cdot \left(maxCos + -1\right) + 1} \]
  5. Final simplification0.0

    \[\leadsto ux \cdot \left(maxCos + -1\right) + 1 \]

Reproduce

herbie shell --seed 2022162 
(FPCore (ux uy maxCos)
  :name "UniformSampleCone, z"
  :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)))
  (+ (- 1.0 ux) (* ux maxCos)))