Average Error: 1.8 → 1.9
Time: 14.3s
Precision: 64
\[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)}}\right)}\]
\[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + \mathsf{log1p}\left(\mathsf{expm1}\left({\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)\right)\right)}}\right)}\]
\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)}}\right)}
\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + \mathsf{log1p}\left(\mathsf{expm1}\left({\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)\right)\right)}}\right)}
double f(double l, double Om, double kx, double ky) {
        double r57428 = 1.0;
        double r57429 = 2.0;
        double r57430 = r57428 / r57429;
        double r57431 = l;
        double r57432 = r57429 * r57431;
        double r57433 = Om;
        double r57434 = r57432 / r57433;
        double r57435 = pow(r57434, r57429);
        double r57436 = kx;
        double r57437 = sin(r57436);
        double r57438 = pow(r57437, r57429);
        double r57439 = ky;
        double r57440 = sin(r57439);
        double r57441 = pow(r57440, r57429);
        double r57442 = r57438 + r57441;
        double r57443 = r57435 * r57442;
        double r57444 = r57428 + r57443;
        double r57445 = sqrt(r57444);
        double r57446 = r57428 / r57445;
        double r57447 = r57428 + r57446;
        double r57448 = r57430 * r57447;
        double r57449 = sqrt(r57448);
        return r57449;
}

double f(double l, double Om, double kx, double ky) {
        double r57450 = 1.0;
        double r57451 = 2.0;
        double r57452 = r57450 / r57451;
        double r57453 = l;
        double r57454 = r57451 * r57453;
        double r57455 = Om;
        double r57456 = r57454 / r57455;
        double r57457 = pow(r57456, r57451);
        double r57458 = kx;
        double r57459 = sin(r57458);
        double r57460 = pow(r57459, r57451);
        double r57461 = ky;
        double r57462 = sin(r57461);
        double r57463 = pow(r57462, r57451);
        double r57464 = r57460 + r57463;
        double r57465 = r57457 * r57464;
        double r57466 = expm1(r57465);
        double r57467 = log1p(r57466);
        double r57468 = r57450 + r57467;
        double r57469 = sqrt(r57468);
        double r57470 = r57450 / r57469;
        double r57471 = r57450 + r57470;
        double r57472 = r57452 * r57471;
        double r57473 = sqrt(r57472);
        return r57473;
}

Error

Bits error versus l

Bits error versus Om

Bits error versus kx

Bits error versus ky

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 1.8

    \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)}}\right)}\]
  2. Using strategy rm
  3. Applied log1p-expm1-u1.9

    \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left({\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)\right)\right)}}}\right)}\]
  4. Final simplification1.9

    \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + \mathsf{log1p}\left(\mathsf{expm1}\left({\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\left(\sin kx\right)}^{2} + {\left(\sin ky\right)}^{2}\right)\right)\right)}}\right)}\]

Reproduce

herbie shell --seed 2020047 +o rules:numerics
(FPCore (l Om kx ky)
  :name "Toniolo and Linder, Equation (3a)"
  :precision binary64
  (sqrt (* (/ 1 2) (+ 1 (/ 1 (sqrt (+ 1 (* (pow (/ (* 2 l) Om) 2) (+ (pow (sin kx) 2) (pow (sin ky) 2))))))))))