-\frac{1}{\frac{\pi}{4}} \cdot \log \left(\frac{e^{\frac{\pi}{4} \cdot f} + e^{-\frac{\pi}{4} \cdot f}}{e^{\frac{\pi}{4} \cdot f} - e^{-\frac{\pi}{4} \cdot f}}\right)\begin{array}{l}
\mathbf{if}\;\frac{\pi}{4} \cdot f \leq 0.0003726407836163889:\\
\;\;\;\;-4 \cdot \frac{\log \left(\frac{1}{f}\right) + 2 \cdot \log \left(2 \cdot \sqrt{\frac{1}{\pi}}\right)}{\pi}\\
\mathbf{else}:\\
\;\;\;\;0\\
\end{array}(FPCore (f)
:precision binary64
(-
(*
(/ 1.0 (/ PI 4.0))
(log
(/
(+ (exp (* (/ PI 4.0) f)) (exp (- (* (/ PI 4.0) f))))
(- (exp (* (/ PI 4.0) f)) (exp (- (* (/ PI 4.0) f)))))))))(FPCore (f) :precision binary64 (if (<= (* (/ PI 4.0) f) 0.0003726407836163889) (* -4.0 (/ (+ (log (/ 1.0 f)) (* 2.0 (log (* 2.0 (sqrt (/ 1.0 PI)))))) PI)) 0.0))
double code(double f) {
return -((1.0 / (((double) M_PI) / 4.0)) * log((exp((((double) M_PI) / 4.0) * f) + exp(-((((double) M_PI) / 4.0) * f))) / (exp((((double) M_PI) / 4.0) * f) - exp(-((((double) M_PI) / 4.0) * f)))));
}
double code(double f) {
double tmp;
if (((((double) M_PI) / 4.0) * f) <= 0.0003726407836163889) {
tmp = -4.0 * ((log(1.0 / f) + (2.0 * log(2.0 * sqrt(1.0 / ((double) M_PI))))) / ((double) M_PI));
} else {
tmp = 0.0;
}
return tmp;
}



Bits error versus f
Results
if (*.f64 (/.f64 PI.f64 4) f) < 3.72640783616388883e-4Initial program 62.5
Simplified62.5
Taylor expanded around 0 0.5
Simplified0.5
rmApplied add-sqr-sqrt_binary640.5
Applied log-prod_binary640.5
Applied associate--l+_binary640.5
Simplified0.5
Taylor expanded around inf 0.5
if 3.72640783616388883e-4 < (*.f64 (/.f64 PI.f64 4) f) Initial program 30.4
Final simplification1.6
herbie shell --seed 2021097
(FPCore (f)
:name "VandenBroeck and Keller, Equation (20)"
:precision binary64
(- (* (/ 1.0 (/ PI 4.0)) (log (/ (+ (exp (* (/ PI 4.0) f)) (exp (- (* (/ PI 4.0) f)))) (- (exp (* (/ PI 4.0) f)) (exp (- (* (/ PI 4.0) f)))))))))