| Alternative 1 | |
|---|---|
| Accuracy | 51.3% |
| Cost | 32704 |

(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}
Herbie found 4 alternatives:
| Alternative | Accuracy | Speedup |
|---|
Initial program 3.3%
Taylor expanded in f around 0 53.7%
Simplified53.7%
[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)}
\] |
Applied egg-rr53.8%
[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}}}
\] |
Simplified53.8%
[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}
\] |
Applied egg-rr53.8%
[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}
\] |
Simplified53.8%
[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}
\] |
Final simplification53.8%
| Alternative 1 | |
|---|---|
| Accuracy | 51.3% |
| Cost | 32704 |
| Alternative 2 | |
|---|---|
| Accuracy | 51.4% |
| Cost | 26432 |
| Alternative 3 | |
|---|---|
| Accuracy | 51.2% |
| Cost | 26048 |
| Alternative 4 | |
|---|---|
| Accuracy | 51.1% |
| Cost | 19648 |
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)))))))))