Average Error: 0.4 → 0.4
Time: 34.8s
Precision: 64
\[0 \le u1 \le 1 \land 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\]
\[\left({\left(-2 \cdot \log u1\right)}^{0.5} \cdot \frac{1}{6}\right) \cdot \cos \left(2 \cdot \left(\pi \cdot u2\right)\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
\left({\left(-2 \cdot \log u1\right)}^{0.5} \cdot \frac{1}{6}\right) \cdot \cos \left(2 \cdot \left(\pi \cdot u2\right)\right) + 0.5
double f(double u1, double u2) {
        double r1063953 = 1.0;
        double r1063954 = 6.0;
        double r1063955 = r1063953 / r1063954;
        double r1063956 = -2.0;
        double r1063957 = u1;
        double r1063958 = log(r1063957);
        double r1063959 = r1063956 * r1063958;
        double r1063960 = 0.5;
        double r1063961 = pow(r1063959, r1063960);
        double r1063962 = r1063955 * r1063961;
        double r1063963 = 2.0;
        double r1063964 = atan2(1.0, 0.0);
        double r1063965 = r1063963 * r1063964;
        double r1063966 = u2;
        double r1063967 = r1063965 * r1063966;
        double r1063968 = cos(r1063967);
        double r1063969 = r1063962 * r1063968;
        double r1063970 = r1063969 + r1063960;
        return r1063970;
}

double f(double u1, double u2) {
        double r1063971 = -2.0;
        double r1063972 = u1;
        double r1063973 = log(r1063972);
        double r1063974 = r1063971 * r1063973;
        double r1063975 = 0.5;
        double r1063976 = pow(r1063974, r1063975);
        double r1063977 = 0.16666666666666666;
        double r1063978 = r1063976 * r1063977;
        double r1063979 = 2.0;
        double r1063980 = atan2(1.0, 0.0);
        double r1063981 = u2;
        double r1063982 = r1063980 * r1063981;
        double r1063983 = r1063979 * r1063982;
        double r1063984 = cos(r1063983);
        double r1063985 = r1063978 * r1063984;
        double r1063986 = r1063985 + r1063975;
        return r1063986;
}

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. Simplified0.4

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

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

Reproduce

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