Average Error: 0.4 → 0.3
Time: 10.1s
Precision: 64
\[0.0 \le u1 \le 1 \land 0.0 \le u2 \le 1\]
\[\left(\frac{1}{6} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5\]
\[\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6} \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5\]
\left(\frac{1}{6} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5
\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6} \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5
double f(double u1, double u2) {
        double r61162 = 1.0;
        double r61163 = 6.0;
        double r61164 = r61162 / r61163;
        double r61165 = -2.0;
        double r61166 = u1;
        double r61167 = log(r61166);
        double r61168 = r61165 * r61167;
        double r61169 = 0.5;
        double r61170 = pow(r61168, r61169);
        double r61171 = r61164 * r61170;
        double r61172 = 2.0;
        double r61173 = atan2(1.0, 0.0);
        double r61174 = r61172 * r61173;
        double r61175 = u2;
        double r61176 = r61174 * r61175;
        double r61177 = cos(r61176);
        double r61178 = r61171 * r61177;
        double r61179 = r61178 + r61169;
        return r61179;
}

double f(double u1, double u2) {
        double r61180 = 1.0;
        double r61181 = -2.0;
        double r61182 = u1;
        double r61183 = log(r61182);
        double r61184 = r61181 * r61183;
        double r61185 = 0.5;
        double r61186 = pow(r61184, r61185);
        double r61187 = r61180 * r61186;
        double r61188 = 6.0;
        double r61189 = r61187 / r61188;
        double r61190 = 2.0;
        double r61191 = atan2(1.0, 0.0);
        double r61192 = r61190 * r61191;
        double r61193 = u2;
        double r61194 = r61192 * r61193;
        double r61195 = cos(r61194);
        double r61196 = r61189 * r61195;
        double r61197 = r61196 + r61185;
        return r61197;
}

Error

Bits error versus u1

Bits error versus u2

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.4

    \[\left(\frac{1}{6} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5\]
  2. Using strategy rm
  3. Applied associate-*l/0.3

    \[\leadsto \color{blue}{\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6}} \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5\]
  4. Final simplification0.3

    \[\leadsto \frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6} \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5\]

Reproduce

herbie shell --seed 2020039 
(FPCore (u1 u2)
  :name "normal distribution"
  :precision binary64
  :pre (and (<= 0.0 u1 1) (<= 0.0 u2 1))
  (+ (* (* (/ 1 6) (pow (* -2 (log u1)) 0.5)) (cos (* (* 2 PI) u2))) 0.5))