VandenBroeck and Keller, Equation (20)

?

Percentage Accurate: 3.5% → 51.3%
Time: 48.3s
Precision: binary64
Cost: 32704

?

\[-\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) \]
\[\frac{-\log \left(\mathsf{fma}\left(f, \pi \cdot 0.08333333333333333, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]
(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
 (/ (- (log (fma f (* PI 0.08333333333333333) (/ (/ 4.0 f) PI)))) (* PI 0.25)))
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) {
	return -log(fma(f, (((double) M_PI) * 0.08333333333333333), ((4.0 / f) / ((double) M_PI)))) / (((double) M_PI) * 0.25);
}
function code(f)
	return Float64(-Float64(Float64(1.0 / Float64(pi / 4.0)) * log(Float64(Float64(exp(Float64(Float64(pi / 4.0) * f)) + exp(Float64(-Float64(Float64(pi / 4.0) * f)))) / Float64(exp(Float64(Float64(pi / 4.0) * f)) - exp(Float64(-Float64(Float64(pi / 4.0) * f))))))))
end
function code(f)
	return Float64(Float64(-log(fma(f, Float64(pi * 0.08333333333333333), Float64(Float64(4.0 / f) / pi)))) / Float64(pi * 0.25))
end
code[f_] := (-N[(N[(1.0 / N[(Pi / 4.0), $MachinePrecision]), $MachinePrecision] * N[Log[N[(N[(N[Exp[N[(N[(Pi / 4.0), $MachinePrecision] * f), $MachinePrecision]], $MachinePrecision] + N[Exp[(-N[(N[(Pi / 4.0), $MachinePrecision] * f), $MachinePrecision])], $MachinePrecision]), $MachinePrecision] / N[(N[Exp[N[(N[(Pi / 4.0), $MachinePrecision] * f), $MachinePrecision]], $MachinePrecision] - N[Exp[(-N[(N[(Pi / 4.0), $MachinePrecision] * f), $MachinePrecision])], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision])
code[f_] := N[((-N[Log[N[(f * N[(Pi * 0.08333333333333333), $MachinePrecision] + N[(N[(4.0 / f), $MachinePrecision] / Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]) / N[(Pi * 0.25), $MachinePrecision]), $MachinePrecision]
-\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)
\frac{-\log \left(\mathsf{fma}\left(f, \pi \cdot 0.08333333333333333, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25}

Local Percentage Accuracy vs ?

The average percentage accuracy by input value. Horizontal axis shows value of an input variable; the variable is choosen in the title. Vertical axis is accuracy; higher is better. Red represent the original program, while blue represents Herbie's suggestion. These can be toggled with buttons below the plot. The line is an average while dots represent individual samples.

Herbie found 4 alternatives:

AlternativeAccuracySpeedup

Accuracy vs Speed

The accuracy (vertical axis) and speed (horizontal axis) of each alternatives. Up and to the right is better. The red square shows the initial program, and each blue circle shows an alternative.The line shows the best available speed-accuracy tradeoffs.

Bogosity?

Bogosity

Derivation?

  1. Initial program 3.3%

    \[-\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) \]
  2. Taylor expanded in f around 0 53.7%

    \[\leadsto -\frac{1}{\frac{\pi}{4}} \cdot \log \color{blue}{\left(-0.25 \cdot \frac{\pi}{0.25 \cdot \pi - -0.25 \cdot \pi} + \left(2 \cdot \frac{1}{\left(0.25 \cdot \pi - -0.25 \cdot \pi\right) \cdot f} + \left(0.25 \cdot \frac{\pi}{0.25 \cdot \pi - -0.25 \cdot \pi} + f \cdot \left(0.0625 \cdot \frac{{\pi}^{2}}{0.25 \cdot \pi - -0.25 \cdot \pi} - 2 \cdot \frac{0.0026041666666666665 \cdot {\pi}^{3} - -0.0026041666666666665 \cdot {\pi}^{3}}{{\left(0.25 \cdot \pi - -0.25 \cdot \pi\right)}^{2}}\right)\right)\right)\right)} \]
  3. Simplified53.7%

    \[\leadsto -\frac{1}{\frac{\pi}{4}} \cdot \log \color{blue}{\left(\mathsf{fma}\left(f, \mathsf{fma}\left(\frac{0.005208333333333333 \cdot \frac{\pi}{0.5}}{0.5}, -2, 0.0625 \cdot \frac{\pi}{0.5}\right), \frac{\frac{4}{\pi}}{f}\right)\right)} \]
    Step-by-step derivation

    [Start]53.7%

    \[ -\frac{1}{\frac{\pi}{4}} \cdot \log \left(-0.25 \cdot \frac{\pi}{0.25 \cdot \pi - -0.25 \cdot \pi} + \left(2 \cdot \frac{1}{\left(0.25 \cdot \pi - -0.25 \cdot \pi\right) \cdot f} + \left(0.25 \cdot \frac{\pi}{0.25 \cdot \pi - -0.25 \cdot \pi} + f \cdot \left(0.0625 \cdot \frac{{\pi}^{2}}{0.25 \cdot \pi - -0.25 \cdot \pi} - 2 \cdot \frac{0.0026041666666666665 \cdot {\pi}^{3} - -0.0026041666666666665 \cdot {\pi}^{3}}{{\left(0.25 \cdot \pi - -0.25 \cdot \pi\right)}^{2}}\right)\right)\right)\right) \]

    associate-+r+ [=>]53.7%

    \[ -\frac{1}{\frac{\pi}{4}} \cdot \log \color{blue}{\left(\left(-0.25 \cdot \frac{\pi}{0.25 \cdot \pi - -0.25 \cdot \pi} + 2 \cdot \frac{1}{\left(0.25 \cdot \pi - -0.25 \cdot \pi\right) \cdot f}\right) + \left(0.25 \cdot \frac{\pi}{0.25 \cdot \pi - -0.25 \cdot \pi} + f \cdot \left(0.0625 \cdot \frac{{\pi}^{2}}{0.25 \cdot \pi - -0.25 \cdot \pi} - 2 \cdot \frac{0.0026041666666666665 \cdot {\pi}^{3} - -0.0026041666666666665 \cdot {\pi}^{3}}{{\left(0.25 \cdot \pi - -0.25 \cdot \pi\right)}^{2}}\right)\right)\right)} \]

    +-commutative [=>]53.7%

    \[ -\frac{1}{\frac{\pi}{4}} \cdot \log \color{blue}{\left(\left(0.25 \cdot \frac{\pi}{0.25 \cdot \pi - -0.25 \cdot \pi} + f \cdot \left(0.0625 \cdot \frac{{\pi}^{2}}{0.25 \cdot \pi - -0.25 \cdot \pi} - 2 \cdot \frac{0.0026041666666666665 \cdot {\pi}^{3} - -0.0026041666666666665 \cdot {\pi}^{3}}{{\left(0.25 \cdot \pi - -0.25 \cdot \pi\right)}^{2}}\right)\right) + \left(-0.25 \cdot \frac{\pi}{0.25 \cdot \pi - -0.25 \cdot \pi} + 2 \cdot \frac{1}{\left(0.25 \cdot \pi - -0.25 \cdot \pi\right) \cdot f}\right)\right)} \]
  4. Applied egg-rr53.8%

    \[\leadsto -\color{blue}{\frac{\log \left(\mathsf{fma}\left(f, \mathsf{fma}\left(\left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot 2, -2, \left(\pi \cdot 2\right) \cdot 0.0625\right), \frac{4}{f \cdot \pi}\right)\right)}{\pi \cdot 0.25}} \]
    Step-by-step derivation

    [Start]53.7%

    \[ -\frac{1}{\frac{\pi}{4}} \cdot \log \left(\mathsf{fma}\left(f, \mathsf{fma}\left(\frac{0.005208333333333333 \cdot \frac{\pi}{0.5}}{0.5}, -2, 0.0625 \cdot \frac{\pi}{0.5}\right), \frac{\frac{4}{\pi}}{f}\right)\right) \]

    associate-*l/ [=>]53.8%

    \[ -\color{blue}{\frac{1 \cdot \log \left(\mathsf{fma}\left(f, \mathsf{fma}\left(\frac{0.005208333333333333 \cdot \frac{\pi}{0.5}}{0.5}, -2, 0.0625 \cdot \frac{\pi}{0.5}\right), \frac{\frac{4}{\pi}}{f}\right)\right)}{\frac{\pi}{4}}} \]
  5. Simplified53.8%

    \[\leadsto -\color{blue}{\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot 0.125 + \left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot -4, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25}} \]
    Step-by-step derivation

    [Start]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \mathsf{fma}\left(\left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot 2, -2, \left(\pi \cdot 2\right) \cdot 0.0625\right), \frac{4}{f \cdot \pi}\right)\right)}{\pi \cdot 0.25} \]

    fma-def [<=]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \color{blue}{\left(\left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot 2\right) \cdot -2 + \left(\pi \cdot 2\right) \cdot 0.0625}, \frac{4}{f \cdot \pi}\right)\right)}{\pi \cdot 0.25} \]

    +-commutative [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \color{blue}{\left(\pi \cdot 2\right) \cdot 0.0625 + \left(\left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot 2\right) \cdot -2}, \frac{4}{f \cdot \pi}\right)\right)}{\pi \cdot 0.25} \]

    associate-*l* [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \color{blue}{\pi \cdot \left(2 \cdot 0.0625\right)} + \left(\left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot 2\right) \cdot -2, \frac{4}{f \cdot \pi}\right)\right)}{\pi \cdot 0.25} \]

    metadata-eval [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot \color{blue}{0.125} + \left(\left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot 2\right) \cdot -2, \frac{4}{f \cdot \pi}\right)\right)}{\pi \cdot 0.25} \]

    associate-*l* [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot 0.125 + \color{blue}{\left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot \left(2 \cdot -2\right)}, \frac{4}{f \cdot \pi}\right)\right)}{\pi \cdot 0.25} \]

    metadata-eval [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot 0.125 + \left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot \color{blue}{-4}, \frac{4}{f \cdot \pi}\right)\right)}{\pi \cdot 0.25} \]

    associate-/r* [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot 0.125 + \left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot -4, \color{blue}{\frac{\frac{4}{f}}{\pi}}\right)\right)}{\pi \cdot 0.25} \]
  6. Applied egg-rr53.8%

    \[\leadsto -\frac{\log \left(\mathsf{fma}\left(f, \color{blue}{e^{\mathsf{log1p}\left(\mathsf{fma}\left(\pi, 0.125, \left(\left(0.005208333333333333 \cdot \pi\right) \cdot 2\right) \cdot -4\right)\right)} - 1}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]
    Step-by-step derivation

    [Start]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot 0.125 + \left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot -4, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    expm1-log1p-u [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\pi \cdot 0.125 + \left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot -4\right)\right)}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    expm1-udef [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \color{blue}{e^{\mathsf{log1p}\left(\pi \cdot 0.125 + \left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot -4\right)} - 1}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    fma-def [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, e^{\mathsf{log1p}\left(\color{blue}{\mathsf{fma}\left(\pi, 0.125, \left(0.005208333333333333 \cdot \left(\pi \cdot 2\right)\right) \cdot -4\right)}\right)} - 1, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    associate-*r* [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, e^{\mathsf{log1p}\left(\mathsf{fma}\left(\pi, 0.125, \color{blue}{\left(\left(0.005208333333333333 \cdot \pi\right) \cdot 2\right)} \cdot -4\right)\right)} - 1, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]
  7. Simplified53.8%

    \[\leadsto -\frac{\log \left(\mathsf{fma}\left(f, \color{blue}{\pi \cdot 0.08333333333333333}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]
    Step-by-step derivation

    [Start]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, e^{\mathsf{log1p}\left(\mathsf{fma}\left(\pi, 0.125, \left(\left(0.005208333333333333 \cdot \pi\right) \cdot 2\right) \cdot -4\right)\right)} - 1, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    expm1-def [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left(\pi, 0.125, \left(\left(0.005208333333333333 \cdot \pi\right) \cdot 2\right) \cdot -4\right)\right)\right)}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    expm1-log1p [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \color{blue}{\mathsf{fma}\left(\pi, 0.125, \left(\left(0.005208333333333333 \cdot \pi\right) \cdot 2\right) \cdot -4\right)}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    fma-udef [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \color{blue}{\pi \cdot 0.125 + \left(\left(0.005208333333333333 \cdot \pi\right) \cdot 2\right) \cdot -4}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    associate-*l* [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot 0.125 + \color{blue}{\left(0.005208333333333333 \cdot \pi\right) \cdot \left(2 \cdot -4\right)}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    *-commutative [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot 0.125 + \color{blue}{\left(\pi \cdot 0.005208333333333333\right)} \cdot \left(2 \cdot -4\right), \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    metadata-eval [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot 0.125 + \left(\pi \cdot 0.005208333333333333\right) \cdot \color{blue}{-8}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    metadata-eval [<=]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot 0.125 + \left(\pi \cdot 0.005208333333333333\right) \cdot \color{blue}{{-2}^{3}}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    associate-*l* [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot 0.125 + \color{blue}{\pi \cdot \left(0.005208333333333333 \cdot {-2}^{3}\right)}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    metadata-eval [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot 0.125 + \pi \cdot \left(0.005208333333333333 \cdot \color{blue}{-8}\right), \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    metadata-eval [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot 0.125 + \pi \cdot \color{blue}{-0.041666666666666664}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    distribute-lft-out [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \color{blue}{\pi \cdot \left(0.125 + -0.041666666666666664\right)}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

    metadata-eval [=>]53.8%

    \[ -\frac{\log \left(\mathsf{fma}\left(f, \pi \cdot \color{blue}{0.08333333333333333}, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]
  8. Final simplification53.8%

    \[\leadsto \frac{-\log \left(\mathsf{fma}\left(f, \pi \cdot 0.08333333333333333, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]

Alternatives

Alternative 1
Accuracy51.3%
Cost32704
\[\frac{-\log \left(\mathsf{fma}\left(f, \pi \cdot 0.08333333333333333, \frac{\frac{4}{f}}{\pi}\right)\right)}{\pi \cdot 0.25} \]
Alternative 2
Accuracy51.4%
Cost26432
\[\frac{-\log \left(f \cdot \left(\pi \cdot 0.08333333333333333\right) + \frac{4}{f \cdot \pi}\right)}{\pi \cdot 0.25} \]
Alternative 3
Accuracy51.2%
Cost26048
\[\left|\frac{\log \left(\frac{4}{f \cdot \pi}\right)}{\pi}\right| \cdot -4 \]
Alternative 4
Accuracy51.1%
Cost19648
\[\frac{\log \left(\frac{4}{f \cdot \pi}\right)}{\pi} \cdot -4 \]

Reproduce?

herbie shell --seed 2023258 
(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)))))))))