Average Error: 37.3 → 15.2
Time: 2.4m
Precision: 64
Internal Precision: 2368
\[\sin \left(x + \varepsilon\right) - \sin x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon - (\frac{1}{2} \cdot \left(\left(x \cdot x\right) \cdot \varepsilon\right) + \left(\left(\varepsilon \cdot \varepsilon\right) \cdot \left(x \cdot \frac{1}{2}\right)\right))_* \le -2.0851602488011864 \cdot 10^{-45}:\\ \;\;\;\;\left(\cos x \cdot \sin \varepsilon + (e^{\log \left(e^{\log_* (1 + \cos \varepsilon \cdot \sin x)}\right)} - 1)^*\right) - \sin x\\ \mathbf{elif}\;\varepsilon - (\frac{1}{2} \cdot \left(\left(x \cdot x\right) \cdot \varepsilon\right) + \left(\left(\varepsilon \cdot \varepsilon\right) \cdot \left(x \cdot \frac{1}{2}\right)\right))_* \le 1.1136541482848599 \cdot 10^{-08}:\\ \;\;\;\;\varepsilon - (\frac{1}{2} \cdot \left(\left(x \cdot x\right) \cdot \varepsilon\right) + \left(\left(\varepsilon \cdot \varepsilon\right) \cdot \left(x \cdot \frac{1}{2}\right)\right))_*\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\cos x \cdot \sin \varepsilon + \cos \varepsilon \cdot \sin x\right) \cdot \left(\cos x \cdot \sin \varepsilon + \cos \varepsilon \cdot \sin x\right) - \sin x \cdot \sin x}{\left(\cos x \cdot \sin \varepsilon + \cos \varepsilon \cdot \sin x\right) + \sin x}\\ \end{array}\]

Error

Bits error versus x

Bits error versus eps

Target

Original37.3
Target15.2
Herbie15.2
\[2 \cdot \left(\cos \left(x + \frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)\]

Derivation

  1. Split input into 3 regimes
  2. if (- eps (fma 1/2 (* eps (* x x)) (* (* 1/2 x) (* eps eps)))) < -2.0851602488011864e-45

    1. Initial program 34.9

      \[\sin \left(x + \varepsilon\right) - \sin x\]
    2. Using strategy rm
    3. Applied sin-sum18.9

      \[\leadsto \color{blue}{\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right)} - \sin x\]
    4. Using strategy rm
    5. Applied expm1-log1p-u19.0

      \[\leadsto \left(\color{blue}{(e^{\log_* (1 + \sin x \cdot \cos \varepsilon)} - 1)^*} + \cos x \cdot \sin \varepsilon\right) - \sin x\]
    6. Using strategy rm
    7. Applied add-log-exp19.2

      \[\leadsto \left((e^{\color{blue}{\log \left(e^{\log_* (1 + \sin x \cdot \cos \varepsilon)}\right)}} - 1)^* + \cos x \cdot \sin \varepsilon\right) - \sin x\]

    if -2.0851602488011864e-45 < (- eps (fma 1/2 (* eps (* x x)) (* (* 1/2 x) (* eps eps)))) < 1.1136541482848599e-08

    1. Initial program 36.1

      \[\sin \left(x + \varepsilon\right) - \sin x\]
    2. Taylor expanded around 0 11.2

      \[\leadsto \color{blue}{\varepsilon - \left(\frac{1}{2} \cdot \left(\varepsilon \cdot {x}^{2}\right) + \frac{1}{2} \cdot \left({\varepsilon}^{2} \cdot x\right)\right)}\]
    3. Simplified11.2

      \[\leadsto \color{blue}{\varepsilon - (\frac{1}{2} \cdot \left(\varepsilon \cdot \left(x \cdot x\right)\right) + \left(\left(\frac{1}{2} \cdot x\right) \cdot \left(\varepsilon \cdot \varepsilon\right)\right))_*}\]

    if 1.1136541482848599e-08 < (- eps (fma 1/2 (* eps (* x x)) (* (* 1/2 x) (* eps eps))))

    1. Initial program 40.2

      \[\sin \left(x + \varepsilon\right) - \sin x\]
    2. Using strategy rm
    3. Applied sin-sum14.5

      \[\leadsto \color{blue}{\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right)} - \sin x\]
    4. Using strategy rm
    5. Applied flip--14.7

      \[\leadsto \color{blue}{\frac{\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) \cdot \left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x \cdot \sin x}{\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) + \sin x}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification15.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon - (\frac{1}{2} \cdot \left(\left(x \cdot x\right) \cdot \varepsilon\right) + \left(\left(\varepsilon \cdot \varepsilon\right) \cdot \left(x \cdot \frac{1}{2}\right)\right))_* \le -2.0851602488011864 \cdot 10^{-45}:\\ \;\;\;\;\left(\cos x \cdot \sin \varepsilon + (e^{\log \left(e^{\log_* (1 + \cos \varepsilon \cdot \sin x)}\right)} - 1)^*\right) - \sin x\\ \mathbf{elif}\;\varepsilon - (\frac{1}{2} \cdot \left(\left(x \cdot x\right) \cdot \varepsilon\right) + \left(\left(\varepsilon \cdot \varepsilon\right) \cdot \left(x \cdot \frac{1}{2}\right)\right))_* \le 1.1136541482848599 \cdot 10^{-08}:\\ \;\;\;\;\varepsilon - (\frac{1}{2} \cdot \left(\left(x \cdot x\right) \cdot \varepsilon\right) + \left(\left(\varepsilon \cdot \varepsilon\right) \cdot \left(x \cdot \frac{1}{2}\right)\right))_*\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\cos x \cdot \sin \varepsilon + \cos \varepsilon \cdot \sin x\right) \cdot \left(\cos x \cdot \sin \varepsilon + \cos \varepsilon \cdot \sin x\right) - \sin x \cdot \sin x}{\left(\cos x \cdot \sin \varepsilon + \cos \varepsilon \cdot \sin x\right) + \sin x}\\ \end{array}\]

Runtime

Time bar (total: 2.4m)Debug logProfile

herbie shell --seed 2018214 +o rules:numerics
(FPCore (x eps)
  :name "2sin (example 3.3)"

  :herbie-target
  (* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))

  (- (sin (+ x eps)) (sin x)))