Average Error: 16.4 → 8.5
Time: 23.0s
Precision: 64
\[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right)\]
\[\begin{array}{l} \mathbf{if}\;\pi \cdot \ell \le -1.345098993986227768112822472122543299926 \cdot 10^{156} \lor \neg \left(\pi \cdot \ell \le 3.603031496726221099383360975990552251809 \cdot 10^{145}\right):\\ \;\;\;\;\pi \cdot \ell - \frac{1}{F} \cdot \frac{1 \cdot \sin \left(\left(\sqrt[3]{\pi \cdot \ell} \cdot \sqrt[3]{\pi \cdot \ell}\right) \cdot \sqrt[3]{\pi \cdot \ell}\right)}{\cos \left(\pi \cdot \ell\right) \cdot F}\\ \mathbf{else}:\\ \;\;\;\;\pi \cdot \ell - \frac{1}{F} \cdot \frac{1 \cdot \sin \left(\pi \cdot \ell\right)}{\mathsf{fma}\left({\pi}^{2} \cdot {\ell}^{2}, \frac{-1}{2}, \mathsf{fma}\left(\frac{1}{24}, {\pi}^{4} \cdot {\ell}^{4}, 1\right)\right) \cdot F}\\ \end{array}\]
\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right)
\begin{array}{l}
\mathbf{if}\;\pi \cdot \ell \le -1.345098993986227768112822472122543299926 \cdot 10^{156} \lor \neg \left(\pi \cdot \ell \le 3.603031496726221099383360975990552251809 \cdot 10^{145}\right):\\
\;\;\;\;\pi \cdot \ell - \frac{1}{F} \cdot \frac{1 \cdot \sin \left(\left(\sqrt[3]{\pi \cdot \ell} \cdot \sqrt[3]{\pi \cdot \ell}\right) \cdot \sqrt[3]{\pi \cdot \ell}\right)}{\cos \left(\pi \cdot \ell\right) \cdot F}\\

\mathbf{else}:\\
\;\;\;\;\pi \cdot \ell - \frac{1}{F} \cdot \frac{1 \cdot \sin \left(\pi \cdot \ell\right)}{\mathsf{fma}\left({\pi}^{2} \cdot {\ell}^{2}, \frac{-1}{2}, \mathsf{fma}\left(\frac{1}{24}, {\pi}^{4} \cdot {\ell}^{4}, 1\right)\right) \cdot F}\\

\end{array}
double f(double F, double l) {
        double r25488 = atan2(1.0, 0.0);
        double r25489 = l;
        double r25490 = r25488 * r25489;
        double r25491 = 1.0;
        double r25492 = F;
        double r25493 = r25492 * r25492;
        double r25494 = r25491 / r25493;
        double r25495 = tan(r25490);
        double r25496 = r25494 * r25495;
        double r25497 = r25490 - r25496;
        return r25497;
}

double f(double F, double l) {
        double r25498 = atan2(1.0, 0.0);
        double r25499 = l;
        double r25500 = r25498 * r25499;
        double r25501 = -1.3450989939862278e+156;
        bool r25502 = r25500 <= r25501;
        double r25503 = 3.603031496726221e+145;
        bool r25504 = r25500 <= r25503;
        double r25505 = !r25504;
        bool r25506 = r25502 || r25505;
        double r25507 = 1.0;
        double r25508 = F;
        double r25509 = r25507 / r25508;
        double r25510 = 1.0;
        double r25511 = cbrt(r25500);
        double r25512 = r25511 * r25511;
        double r25513 = r25512 * r25511;
        double r25514 = sin(r25513);
        double r25515 = r25510 * r25514;
        double r25516 = cos(r25500);
        double r25517 = r25516 * r25508;
        double r25518 = r25515 / r25517;
        double r25519 = r25509 * r25518;
        double r25520 = r25500 - r25519;
        double r25521 = sin(r25500);
        double r25522 = r25510 * r25521;
        double r25523 = 2.0;
        double r25524 = pow(r25498, r25523);
        double r25525 = pow(r25499, r25523);
        double r25526 = r25524 * r25525;
        double r25527 = -0.5;
        double r25528 = 0.041666666666666664;
        double r25529 = 4.0;
        double r25530 = pow(r25498, r25529);
        double r25531 = pow(r25499, r25529);
        double r25532 = r25530 * r25531;
        double r25533 = fma(r25528, r25532, r25507);
        double r25534 = fma(r25526, r25527, r25533);
        double r25535 = r25534 * r25508;
        double r25536 = r25522 / r25535;
        double r25537 = r25509 * r25536;
        double r25538 = r25500 - r25537;
        double r25539 = r25506 ? r25520 : r25538;
        return r25539;
}

Error

Bits error versus F

Bits error versus l

Derivation

  1. Split input into 2 regimes
  2. if (* PI l) < -1.3450989939862278e+156 or 3.603031496726221e+145 < (* PI l)

    1. Initial program 20.4

      \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right)\]
    2. Using strategy rm
    3. Applied *-un-lft-identity20.4

      \[\leadsto \pi \cdot \ell - \frac{\color{blue}{1 \cdot 1}}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right)\]
    4. Applied times-frac20.4

      \[\leadsto \pi \cdot \ell - \color{blue}{\left(\frac{1}{F} \cdot \frac{1}{F}\right)} \cdot \tan \left(\pi \cdot \ell\right)\]
    5. Applied associate-*l*20.4

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1}{F} \cdot \left(\frac{1}{F} \cdot \tan \left(\pi \cdot \ell\right)\right)}\]
    6. Using strategy rm
    7. Applied tan-quot20.4

      \[\leadsto \pi \cdot \ell - \frac{1}{F} \cdot \left(\frac{1}{F} \cdot \color{blue}{\frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)}}\right)\]
    8. Applied frac-times20.4

      \[\leadsto \pi \cdot \ell - \frac{1}{F} \cdot \color{blue}{\frac{1 \cdot \sin \left(\pi \cdot \ell\right)}{F \cdot \cos \left(\pi \cdot \ell\right)}}\]
    9. Simplified20.4

      \[\leadsto \pi \cdot \ell - \frac{1}{F} \cdot \frac{1 \cdot \sin \left(\pi \cdot \ell\right)}{\color{blue}{\cos \left(\pi \cdot \ell\right) \cdot F}}\]
    10. Using strategy rm
    11. Applied add-cube-cbrt20.4

      \[\leadsto \pi \cdot \ell - \frac{1}{F} \cdot \frac{1 \cdot \sin \color{blue}{\left(\left(\sqrt[3]{\pi \cdot \ell} \cdot \sqrt[3]{\pi \cdot \ell}\right) \cdot \sqrt[3]{\pi \cdot \ell}\right)}}{\cos \left(\pi \cdot \ell\right) \cdot F}\]

    if -1.3450989939862278e+156 < (* PI l) < 3.603031496726221e+145

    1. Initial program 14.9

      \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right)\]
    2. Using strategy rm
    3. Applied *-un-lft-identity14.9

      \[\leadsto \pi \cdot \ell - \frac{\color{blue}{1 \cdot 1}}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right)\]
    4. Applied times-frac14.9

      \[\leadsto \pi \cdot \ell - \color{blue}{\left(\frac{1}{F} \cdot \frac{1}{F}\right)} \cdot \tan \left(\pi \cdot \ell\right)\]
    5. Applied associate-*l*9.2

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1}{F} \cdot \left(\frac{1}{F} \cdot \tan \left(\pi \cdot \ell\right)\right)}\]
    6. Using strategy rm
    7. Applied tan-quot9.2

      \[\leadsto \pi \cdot \ell - \frac{1}{F} \cdot \left(\frac{1}{F} \cdot \color{blue}{\frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)}}\right)\]
    8. Applied frac-times9.2

      \[\leadsto \pi \cdot \ell - \frac{1}{F} \cdot \color{blue}{\frac{1 \cdot \sin \left(\pi \cdot \ell\right)}{F \cdot \cos \left(\pi \cdot \ell\right)}}\]
    9. Simplified9.2

      \[\leadsto \pi \cdot \ell - \frac{1}{F} \cdot \frac{1 \cdot \sin \left(\pi \cdot \ell\right)}{\color{blue}{\cos \left(\pi \cdot \ell\right) \cdot F}}\]
    10. Taylor expanded around 0 4.0

      \[\leadsto \pi \cdot \ell - \frac{1}{F} \cdot \frac{1 \cdot \sin \left(\pi \cdot \ell\right)}{\color{blue}{\left(\left(\frac{1}{24} \cdot \left({\pi}^{4} \cdot {\ell}^{4}\right) + 1\right) - \frac{1}{2} \cdot \left({\pi}^{2} \cdot {\ell}^{2}\right)\right)} \cdot F}\]
    11. Simplified4.0

      \[\leadsto \pi \cdot \ell - \frac{1}{F} \cdot \frac{1 \cdot \sin \left(\pi \cdot \ell\right)}{\color{blue}{\mathsf{fma}\left({\pi}^{2} \cdot {\ell}^{2}, \frac{-1}{2}, \mathsf{fma}\left(\frac{1}{24}, {\pi}^{4} \cdot {\ell}^{4}, 1\right)\right)} \cdot F}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification8.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;\pi \cdot \ell \le -1.345098993986227768112822472122543299926 \cdot 10^{156} \lor \neg \left(\pi \cdot \ell \le 3.603031496726221099383360975990552251809 \cdot 10^{145}\right):\\ \;\;\;\;\pi \cdot \ell - \frac{1}{F} \cdot \frac{1 \cdot \sin \left(\left(\sqrt[3]{\pi \cdot \ell} \cdot \sqrt[3]{\pi \cdot \ell}\right) \cdot \sqrt[3]{\pi \cdot \ell}\right)}{\cos \left(\pi \cdot \ell\right) \cdot F}\\ \mathbf{else}:\\ \;\;\;\;\pi \cdot \ell - \frac{1}{F} \cdot \frac{1 \cdot \sin \left(\pi \cdot \ell\right)}{\mathsf{fma}\left({\pi}^{2} \cdot {\ell}^{2}, \frac{-1}{2}, \mathsf{fma}\left(\frac{1}{24}, {\pi}^{4} \cdot {\ell}^{4}, 1\right)\right) \cdot F}\\ \end{array}\]

Reproduce

herbie shell --seed 2019212 +o rules:numerics
(FPCore (F l)
  :name "VandenBroeck and Keller, Equation (6)"
  :precision binary64
  (- (* PI l) (* (/ 1 (* F F)) (tan (* PI l)))))