
(FPCore (u s)
:precision binary32
(let* ((t_0 (/ 1.0 (+ 1.0 (exp (/ PI s))))))
(*
(- s)
(log
(-
(/ 1.0 (+ (* u (- (/ 1.0 (+ 1.0 (exp (/ (- PI) s)))) t_0)) t_0))
1.0)))))
float code(float u, float s) {
float t_0 = 1.0f / (1.0f + expf((((float) M_PI) / s)));
return -s * logf(((1.0f / ((u * ((1.0f / (1.0f + expf((-((float) M_PI) / s)))) - t_0)) + t_0)) - 1.0f));
}
function code(u, s) t_0 = Float32(Float32(1.0) / Float32(Float32(1.0) + exp(Float32(Float32(pi) / s)))) return Float32(Float32(-s) * log(Float32(Float32(Float32(1.0) / Float32(Float32(u * Float32(Float32(Float32(1.0) / Float32(Float32(1.0) + exp(Float32(Float32(-Float32(pi)) / s)))) - t_0)) + t_0)) - Float32(1.0)))) end
function tmp = code(u, s) t_0 = single(1.0) / (single(1.0) + exp((single(pi) / s))); tmp = -s * log(((single(1.0) / ((u * ((single(1.0) / (single(1.0) + exp((-single(pi) / s)))) - t_0)) + t_0)) - single(1.0))); end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{1}{1 + e^{\frac{\pi}{s}}}\\
\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - t\_0\right) + t\_0} - 1\right)
\end{array}
\end{array}
Herbie found 13 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (u s)
:precision binary32
(let* ((t_0 (/ 1.0 (+ 1.0 (exp (/ PI s))))))
(*
(- s)
(log
(-
(/ 1.0 (+ (* u (- (/ 1.0 (+ 1.0 (exp (/ (- PI) s)))) t_0)) t_0))
1.0)))))
float code(float u, float s) {
float t_0 = 1.0f / (1.0f + expf((((float) M_PI) / s)));
return -s * logf(((1.0f / ((u * ((1.0f / (1.0f + expf((-((float) M_PI) / s)))) - t_0)) + t_0)) - 1.0f));
}
function code(u, s) t_0 = Float32(Float32(1.0) / Float32(Float32(1.0) + exp(Float32(Float32(pi) / s)))) return Float32(Float32(-s) * log(Float32(Float32(Float32(1.0) / Float32(Float32(u * Float32(Float32(Float32(1.0) / Float32(Float32(1.0) + exp(Float32(Float32(-Float32(pi)) / s)))) - t_0)) + t_0)) - Float32(1.0)))) end
function tmp = code(u, s) t_0 = single(1.0) / (single(1.0) + exp((single(pi) / s))); tmp = -s * log(((single(1.0) / ((u * ((single(1.0) / (single(1.0) + exp((-single(pi) / s)))) - t_0)) + t_0)) - single(1.0))); end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{1}{1 + e^{\frac{\pi}{s}}}\\
\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - t\_0\right) + t\_0} - 1\right)
\end{array}
\end{array}
(FPCore (u s)
:precision binary32
(let* ((t_0 (/ 1.0 (+ 1.0 (exp (/ PI s))))))
(*
(- s)
(log
(-
(/ 1.0 (+ (* u (- (/ 1.0 (+ 1.0 (exp (/ (- PI) s)))) t_0)) t_0))
1.0)))))
float code(float u, float s) {
float t_0 = 1.0f / (1.0f + expf((((float) M_PI) / s)));
return -s * logf(((1.0f / ((u * ((1.0f / (1.0f + expf((-((float) M_PI) / s)))) - t_0)) + t_0)) - 1.0f));
}
function code(u, s) t_0 = Float32(Float32(1.0) / Float32(Float32(1.0) + exp(Float32(Float32(pi) / s)))) return Float32(Float32(-s) * log(Float32(Float32(Float32(1.0) / Float32(Float32(u * Float32(Float32(Float32(1.0) / Float32(Float32(1.0) + exp(Float32(Float32(-Float32(pi)) / s)))) - t_0)) + t_0)) - Float32(1.0)))) end
function tmp = code(u, s) t_0 = single(1.0) / (single(1.0) + exp((single(pi) / s))); tmp = -s * log(((single(1.0) / ((u * ((single(1.0) / (single(1.0) + exp((-single(pi) / s)))) - t_0)) + t_0)) - single(1.0))); end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{1}{1 + e^{\frac{\pi}{s}}}\\
\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - t\_0\right) + t\_0} - 1\right)
\end{array}
\end{array}
Initial program 98.9%
(FPCore (u s)
:precision binary32
(*
(log
(-
(/
1.0
(*
u
(-
(/ 1.0 (+ 1.0 (exp (* -1.0 (/ PI s)))))
(/ 1.0 (+ 1.0 (exp (/ PI s)))))))
1.0))
(- s)))
float code(float u, float s) {
return logf(((1.0f / (u * ((1.0f / (1.0f + expf((-1.0f * (((float) M_PI) / s))))) - (1.0f / (1.0f + expf((((float) M_PI) / s))))))) - 1.0f)) * -s;
}
function code(u, s) return Float32(log(Float32(Float32(Float32(1.0) / Float32(u * Float32(Float32(Float32(1.0) / Float32(Float32(1.0) + exp(Float32(Float32(-1.0) * Float32(Float32(pi) / s))))) - Float32(Float32(1.0) / Float32(Float32(1.0) + exp(Float32(Float32(pi) / s))))))) - Float32(1.0))) * Float32(-s)) end
function tmp = code(u, s) tmp = log(((single(1.0) / (u * ((single(1.0) / (single(1.0) + exp((single(-1.0) * (single(pi) / s))))) - (single(1.0) / (single(1.0) + exp((single(pi) / s))))))) - single(1.0))) * -s; end
\begin{array}{l}
\\
\log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right)} - 1\right) \cdot \left(-s\right)
\end{array}
Initial program 98.9%
Taylor expanded in s around inf
lower-+.f32N/A
lower-/.f32N/A
lower-PI.f3294.8
Applied rewrites94.8%
Taylor expanded in s around inf
lower-+.f32N/A
lower-/.f32N/A
lower-PI.f3285.4
Applied rewrites85.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3285.4
Applied rewrites85.4%
Taylor expanded in u around inf
lower-*.f32N/A
lower--.f32N/A
lower-/.f32N/A
lower-+.f32N/A
lower-exp.f32N/A
lower-*.f32N/A
lower-/.f32N/A
lower-PI.f32N/A
lower-/.f32N/A
Applied rewrites97.5%
(FPCore (u s)
:precision binary32
(let* ((t_0 (/ 1.0 (- (/ PI s) -2.0))))
(*
(log
(- (/ 1.0 (fma (- (/ -1.0 (- -1.0 (exp (/ (- PI) s)))) t_0) u t_0)) 1.0))
(- s))))
float code(float u, float s) {
float t_0 = 1.0f / ((((float) M_PI) / s) - -2.0f);
return logf(((1.0f / fmaf(((-1.0f / (-1.0f - expf((-((float) M_PI) / s)))) - t_0), u, t_0)) - 1.0f)) * -s;
}
function code(u, s) t_0 = Float32(Float32(1.0) / Float32(Float32(Float32(pi) / s) - Float32(-2.0))) return Float32(log(Float32(Float32(Float32(1.0) / fma(Float32(Float32(Float32(-1.0) / Float32(Float32(-1.0) - exp(Float32(Float32(-Float32(pi)) / s)))) - t_0), u, t_0)) - Float32(1.0))) * Float32(-s)) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{1}{\frac{\pi}{s} - -2}\\
\log \left(\frac{1}{\mathsf{fma}\left(\frac{-1}{-1 - e^{\frac{-\pi}{s}}} - t\_0, u, t\_0\right)} - 1\right) \cdot \left(-s\right)
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in s around inf
lower-+.f32N/A
lower-/.f32N/A
lower-PI.f3294.8
Applied rewrites94.8%
Taylor expanded in s around inf
lower-+.f32N/A
lower-/.f32N/A
lower-PI.f3285.4
Applied rewrites85.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3285.4
Applied rewrites85.4%
(FPCore (u s)
:precision binary32
(let* ((t_0 (+ 2.0 (/ PI s))))
(*
(-
(log
(-
(/ 1.0 (/ (fma u (- (/ t_0 (- (exp (/ (- PI) s)) -1.0)) 1.0) 1.0) t_0))
1.0)))
s)))
float code(float u, float s) {
float t_0 = 2.0f + (((float) M_PI) / s);
return -logf(((1.0f / (fmaf(u, ((t_0 / (expf((-((float) M_PI) / s)) - -1.0f)) - 1.0f), 1.0f) / t_0)) - 1.0f)) * s;
}
function code(u, s) t_0 = Float32(Float32(2.0) + Float32(Float32(pi) / s)) return Float32(Float32(-log(Float32(Float32(Float32(1.0) / Float32(fma(u, Float32(Float32(t_0 / Float32(exp(Float32(Float32(-Float32(pi)) / s)) - Float32(-1.0))) - Float32(1.0)), Float32(1.0)) / t_0)) - Float32(1.0)))) * s) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 2 + \frac{\pi}{s}\\
\left(-\log \left(\frac{1}{\frac{\mathsf{fma}\left(u, \frac{t\_0}{e^{\frac{-\pi}{s}} - -1} - 1, 1\right)}{t\_0}} - 1\right)\right) \cdot s
\end{array}
\end{array}
Initial program 98.9%
Applied rewrites3.9%
Taylor expanded in s around inf
lower-+.f32N/A
lower-/.f32N/A
lower-PI.f325.9
Applied rewrites5.9%
Taylor expanded in s around inf
lower-+.f32N/A
lower-/.f32N/A
lower-PI.f3284.9
Applied rewrites84.9%
(FPCore (u s)
:precision binary32
(*
(log
(-
(/
1.0
(*
(+ 1.0 (* 2.0 (/ (* u (- (* 0.25 PI) (* -0.25 PI))) s)))
(/ 1.0 (- (/ PI s) -2.0))))
1.0))
(- s)))
float code(float u, float s) {
return logf(((1.0f / ((1.0f + (2.0f * ((u * ((0.25f * ((float) M_PI)) - (-0.25f * ((float) M_PI)))) / s))) * (1.0f / ((((float) M_PI) / s) - -2.0f)))) - 1.0f)) * -s;
}
function code(u, s) return Float32(log(Float32(Float32(Float32(1.0) / Float32(Float32(Float32(1.0) + Float32(Float32(2.0) * Float32(Float32(u * Float32(Float32(Float32(0.25) * Float32(pi)) - Float32(Float32(-0.25) * Float32(pi)))) / s))) * Float32(Float32(1.0) / Float32(Float32(Float32(pi) / s) - Float32(-2.0))))) - Float32(1.0))) * Float32(-s)) end
function tmp = code(u, s) tmp = log(((single(1.0) / ((single(1.0) + (single(2.0) * ((u * ((single(0.25) * single(pi)) - (single(-0.25) * single(pi)))) / s))) * (single(1.0) / ((single(pi) / s) - single(-2.0))))) - single(1.0))) * -s; end
\begin{array}{l}
\\
\log \left(\frac{1}{\left(1 + 2 \cdot \frac{u \cdot \left(0.25 \cdot \pi - -0.25 \cdot \pi\right)}{s}\right) \cdot \frac{1}{\frac{\pi}{s} - -2}} - 1\right) \cdot \left(-s\right)
\end{array}
Initial program 98.9%
Taylor expanded in s around inf
lower-+.f32N/A
lower-/.f32N/A
lower-PI.f3294.8
Applied rewrites94.8%
Taylor expanded in s around inf
lower-+.f32N/A
lower-/.f32N/A
lower-PI.f3285.4
Applied rewrites85.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3285.4
Applied rewrites85.4%
lift-fma.f32N/A
lift-/.f32N/A
add-to-fractionN/A
mult-flipN/A
Applied rewrites84.9%
Taylor expanded in s around inf
lower-+.f32N/A
lower-*.f32N/A
lower-/.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-*.f32N/A
lower-PI.f3284.9
Applied rewrites84.9%
(FPCore (u s) :precision binary32 (* (log (- (/ 1.0 (* 1.0 (/ 1.0 (- (/ PI s) -2.0)))) 1.0)) (- s)))
float code(float u, float s) {
return logf(((1.0f / (1.0f * (1.0f / ((((float) M_PI) / s) - -2.0f)))) - 1.0f)) * -s;
}
function code(u, s) return Float32(log(Float32(Float32(Float32(1.0) / Float32(Float32(1.0) * Float32(Float32(1.0) / Float32(Float32(Float32(pi) / s) - Float32(-2.0))))) - Float32(1.0))) * Float32(-s)) end
function tmp = code(u, s) tmp = log(((single(1.0) / (single(1.0) * (single(1.0) / ((single(pi) / s) - single(-2.0))))) - single(1.0))) * -s; end
\begin{array}{l}
\\
\log \left(\frac{1}{1 \cdot \frac{1}{\frac{\pi}{s} - -2}} - 1\right) \cdot \left(-s\right)
\end{array}
Initial program 98.9%
Taylor expanded in s around inf
lower-+.f32N/A
lower-/.f32N/A
lower-PI.f3294.8
Applied rewrites94.8%
Taylor expanded in s around inf
lower-+.f32N/A
lower-/.f32N/A
lower-PI.f3285.4
Applied rewrites85.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3285.4
Applied rewrites85.4%
lift-fma.f32N/A
lift-/.f32N/A
add-to-fractionN/A
mult-flipN/A
Applied rewrites84.9%
Taylor expanded in u around 0
Applied rewrites25.2%
(FPCore (u s)
:precision binary32
(let* ((t_0 (* (* 0.5 PI) u)))
(if (<= s 9.999999682655225e-21)
(* (- s) (log 1.0))
(* 4.0 (* (- 1.0 (/ (* 0.25 PI) t_0)) t_0)))))
float code(float u, float s) {
float t_0 = (0.5f * ((float) M_PI)) * u;
float tmp;
if (s <= 9.999999682655225e-21f) {
tmp = -s * logf(1.0f);
} else {
tmp = 4.0f * ((1.0f - ((0.25f * ((float) M_PI)) / t_0)) * t_0);
}
return tmp;
}
function code(u, s) t_0 = Float32(Float32(Float32(0.5) * Float32(pi)) * u) tmp = Float32(0.0) if (s <= Float32(9.999999682655225e-21)) tmp = Float32(Float32(-s) * log(Float32(1.0))); else tmp = Float32(Float32(4.0) * Float32(Float32(Float32(1.0) - Float32(Float32(Float32(0.25) * Float32(pi)) / t_0)) * t_0)); end return tmp end
function tmp_2 = code(u, s) t_0 = (single(0.5) * single(pi)) * u; tmp = single(0.0); if (s <= single(9.999999682655225e-21)) tmp = -s * log(single(1.0)); else tmp = single(4.0) * ((single(1.0) - ((single(0.25) * single(pi)) / t_0)) * t_0); end tmp_2 = tmp; end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(0.5 \cdot \pi\right) \cdot u\\
\mathbf{if}\;s \leq 9.999999682655225 \cdot 10^{-21}:\\
\;\;\;\;\left(-s\right) \cdot \log 1\\
\mathbf{else}:\\
\;\;\;\;4 \cdot \left(\left(1 - \frac{0.25 \cdot \pi}{t\_0}\right) \cdot t\_0\right)\\
\end{array}
\end{array}
if s < 9.99999968e-21Initial program 98.9%
Taylor expanded in s around inf
Applied rewrites10.3%
if 9.99999968e-21 < s Initial program 98.9%
Taylor expanded in s around inf
lower-*.f32N/A
lower--.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-*.f32N/A
lower-PI.f3211.7
Applied rewrites11.7%
lift--.f32N/A
sub-to-multN/A
lower-unsound-*.f32N/A
Applied rewrites11.7%
(FPCore (u s) :precision binary32 (if (<= s 9.999999682655225e-21) (* (- s) (log 1.0)) (* 4.0 (* u (- (fma -0.25 (/ PI u) (* 0.25 PI)) (* -0.25 PI))))))
float code(float u, float s) {
float tmp;
if (s <= 9.999999682655225e-21f) {
tmp = -s * logf(1.0f);
} else {
tmp = 4.0f * (u * (fmaf(-0.25f, (((float) M_PI) / u), (0.25f * ((float) M_PI))) - (-0.25f * ((float) M_PI))));
}
return tmp;
}
function code(u, s) tmp = Float32(0.0) if (s <= Float32(9.999999682655225e-21)) tmp = Float32(Float32(-s) * log(Float32(1.0))); else tmp = Float32(Float32(4.0) * Float32(u * Float32(fma(Float32(-0.25), Float32(Float32(pi) / u), Float32(Float32(0.25) * Float32(pi))) - Float32(Float32(-0.25) * Float32(pi))))); end return tmp end
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;s \leq 9.999999682655225 \cdot 10^{-21}:\\
\;\;\;\;\left(-s\right) \cdot \log 1\\
\mathbf{else}:\\
\;\;\;\;4 \cdot \left(u \cdot \left(\mathsf{fma}\left(-0.25, \frac{\pi}{u}, 0.25 \cdot \pi\right) - -0.25 \cdot \pi\right)\right)\\
\end{array}
\end{array}
if s < 9.99999968e-21Initial program 98.9%
Taylor expanded in s around inf
Applied rewrites10.3%
if 9.99999968e-21 < s Initial program 98.9%
Taylor expanded in s around inf
lower-*.f32N/A
lower--.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-*.f32N/A
lower-PI.f3211.7
Applied rewrites11.7%
Taylor expanded in u around inf
lower-*.f32N/A
lower--.f32N/A
lower-fma.f32N/A
lower-/.f32N/A
lower-PI.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-*.f32N/A
lower-PI.f3211.7
Applied rewrites11.7%
(FPCore (u s) :precision binary32 (if (<= s 9.999999682655225e-21) (* (- s) (log 1.0)) (* (- s) (* u (fma -2.0 (/ PI s) (/ PI (* s u)))))))
float code(float u, float s) {
float tmp;
if (s <= 9.999999682655225e-21f) {
tmp = -s * logf(1.0f);
} else {
tmp = -s * (u * fmaf(-2.0f, (((float) M_PI) / s), (((float) M_PI) / (s * u))));
}
return tmp;
}
function code(u, s) tmp = Float32(0.0) if (s <= Float32(9.999999682655225e-21)) tmp = Float32(Float32(-s) * log(Float32(1.0))); else tmp = Float32(Float32(-s) * Float32(u * fma(Float32(-2.0), Float32(Float32(pi) / s), Float32(Float32(pi) / Float32(s * u))))); end return tmp end
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;s \leq 9.999999682655225 \cdot 10^{-21}:\\
\;\;\;\;\left(-s\right) \cdot \log 1\\
\mathbf{else}:\\
\;\;\;\;\left(-s\right) \cdot \left(u \cdot \mathsf{fma}\left(-2, \frac{\pi}{s}, \frac{\pi}{s \cdot u}\right)\right)\\
\end{array}
\end{array}
if s < 9.99999968e-21Initial program 98.9%
Taylor expanded in s around inf
Applied rewrites10.3%
if 9.99999968e-21 < s Initial program 98.9%
Taylor expanded in s around -inf
lower-*.f32N/A
lower-/.f32N/A
Applied rewrites11.7%
lift-/.f32N/A
lift--.f32N/A
div-subN/A
lower--.f32N/A
lower-/.f32N/A
lift-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lift--.f32N/A
lift-*.f32N/A
lift-*.f32N/A
distribute-rgt-out--N/A
*-commutativeN/A
lower-*.f32N/A
metadata-evalN/A
Applied rewrites11.7%
Taylor expanded in u around inf
lower-*.f32N/A
lower-fma.f32N/A
lower-/.f32N/A
lower-PI.f32N/A
lower-/.f32N/A
lower-PI.f32N/A
lower-*.f3211.3
Applied rewrites11.3%
(FPCore (u s) :precision binary32 (if (<= s 9.999999682655225e-21) (* (- s) (log 1.0)) (* 4.0 (fma (* u PI) 0.5 (* -0.25 PI)))))
float code(float u, float s) {
float tmp;
if (s <= 9.999999682655225e-21f) {
tmp = -s * logf(1.0f);
} else {
tmp = 4.0f * fmaf((u * ((float) M_PI)), 0.5f, (-0.25f * ((float) M_PI)));
}
return tmp;
}
function code(u, s) tmp = Float32(0.0) if (s <= Float32(9.999999682655225e-21)) tmp = Float32(Float32(-s) * log(Float32(1.0))); else tmp = Float32(Float32(4.0) * fma(Float32(u * Float32(pi)), Float32(0.5), Float32(Float32(-0.25) * Float32(pi)))); end return tmp end
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;s \leq 9.999999682655225 \cdot 10^{-21}:\\
\;\;\;\;\left(-s\right) \cdot \log 1\\
\mathbf{else}:\\
\;\;\;\;4 \cdot \mathsf{fma}\left(u \cdot \pi, 0.5, -0.25 \cdot \pi\right)\\
\end{array}
\end{array}
if s < 9.99999968e-21Initial program 98.9%
Taylor expanded in s around inf
Applied rewrites10.3%
if 9.99999968e-21 < s Initial program 98.9%
Taylor expanded in s around inf
lower-*.f32N/A
lower--.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-*.f32N/A
lower-PI.f3211.7
Applied rewrites11.7%
lift--.f32N/A
lift-*.f32N/A
fp-cancel-sub-sign-invN/A
lift-*.f32N/A
metadata-evalN/A
lift-*.f32N/A
lift--.f32N/A
lift-*.f32N/A
lift-*.f32N/A
distribute-rgt-out--N/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
metadata-eval11.7
Applied rewrites11.7%
(FPCore (u s)
:precision binary32
(let* ((t_0 (/ 1.0 (+ 1.0 (exp (/ PI s))))))
(if (<=
(*
(- s)
(log
(-
(/ 1.0 (+ (* u (- (/ 1.0 (+ 1.0 (exp (/ (- PI) s)))) t_0)) t_0))
1.0)))
-1.999999936531045e-19)
(* (- s) (/ 1.0 (/ s PI)))
(* (- s) (log 1.0)))))
float code(float u, float s) {
float t_0 = 1.0f / (1.0f + expf((((float) M_PI) / s)));
float tmp;
if ((-s * logf(((1.0f / ((u * ((1.0f / (1.0f + expf((-((float) M_PI) / s)))) - t_0)) + t_0)) - 1.0f))) <= -1.999999936531045e-19f) {
tmp = -s * (1.0f / (s / ((float) M_PI)));
} else {
tmp = -s * logf(1.0f);
}
return tmp;
}
function code(u, s) t_0 = Float32(Float32(1.0) / Float32(Float32(1.0) + exp(Float32(Float32(pi) / s)))) tmp = Float32(0.0) if (Float32(Float32(-s) * log(Float32(Float32(Float32(1.0) / Float32(Float32(u * Float32(Float32(Float32(1.0) / Float32(Float32(1.0) + exp(Float32(Float32(-Float32(pi)) / s)))) - t_0)) + t_0)) - Float32(1.0)))) <= Float32(-1.999999936531045e-19)) tmp = Float32(Float32(-s) * Float32(Float32(1.0) / Float32(s / Float32(pi)))); else tmp = Float32(Float32(-s) * log(Float32(1.0))); end return tmp end
function tmp_2 = code(u, s) t_0 = single(1.0) / (single(1.0) + exp((single(pi) / s))); tmp = single(0.0); if ((-s * log(((single(1.0) / ((u * ((single(1.0) / (single(1.0) + exp((-single(pi) / s)))) - t_0)) + t_0)) - single(1.0)))) <= single(-1.999999936531045e-19)) tmp = -s * (single(1.0) / (s / single(pi))); else tmp = -s * log(single(1.0)); end tmp_2 = tmp; end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{1}{1 + e^{\frac{\pi}{s}}}\\
\mathbf{if}\;\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - t\_0\right) + t\_0} - 1\right) \leq -1.999999936531045 \cdot 10^{-19}:\\
\;\;\;\;\left(-s\right) \cdot \frac{1}{\frac{s}{\pi}}\\
\mathbf{else}:\\
\;\;\;\;\left(-s\right) \cdot \log 1\\
\end{array}
\end{array}
if (*.f32 (neg.f32 s) (log.f32 (-.f32 (/.f32 #s(literal 1 binary32) (+.f32 (*.f32 u (-.f32 (/.f32 #s(literal 1 binary32) (+.f32 #s(literal 1 binary32) (exp.f32 (/.f32 (neg.f32 (PI.f32)) s)))) (/.f32 #s(literal 1 binary32) (+.f32 #s(literal 1 binary32) (exp.f32 (/.f32 (PI.f32) s)))))) (/.f32 #s(literal 1 binary32) (+.f32 #s(literal 1 binary32) (exp.f32 (/.f32 (PI.f32) s)))))) #s(literal 1 binary32)))) < -1.99999994e-19Initial program 98.9%
lift-*.f32N/A
lift--.f32N/A
sub-flipN/A
distribute-lft-inN/A
flip3-+N/A
Applied rewrites98.9%
Taylor expanded in u around 0
lower-/.f32N/A
lower-PI.f3211.5
Applied rewrites11.5%
lift-/.f32N/A
div-flipN/A
lower-unsound-/.f32N/A
lower-unsound-/.f3211.5
Applied rewrites11.5%
if -1.99999994e-19 < (*.f32 (neg.f32 s) (log.f32 (-.f32 (/.f32 #s(literal 1 binary32) (+.f32 (*.f32 u (-.f32 (/.f32 #s(literal 1 binary32) (+.f32 #s(literal 1 binary32) (exp.f32 (/.f32 (neg.f32 (PI.f32)) s)))) (/.f32 #s(literal 1 binary32) (+.f32 #s(literal 1 binary32) (exp.f32 (/.f32 (PI.f32) s)))))) (/.f32 #s(literal 1 binary32) (+.f32 #s(literal 1 binary32) (exp.f32 (/.f32 (PI.f32) s)))))) #s(literal 1 binary32)))) Initial program 98.9%
Taylor expanded in s around inf
Applied rewrites10.3%
(FPCore (u s)
:precision binary32
(let* ((t_0 (/ 1.0 (+ 1.0 (exp (/ PI s))))))
(if (<=
(*
(- s)
(log
(-
(/ 1.0 (+ (* u (- (/ 1.0 (+ 1.0 (exp (/ (- PI) s)))) t_0)) t_0))
1.0)))
-1.999999936531045e-19)
(* (- s) (/ PI s))
(* (- s) (log 1.0)))))
float code(float u, float s) {
float t_0 = 1.0f / (1.0f + expf((((float) M_PI) / s)));
float tmp;
if ((-s * logf(((1.0f / ((u * ((1.0f / (1.0f + expf((-((float) M_PI) / s)))) - t_0)) + t_0)) - 1.0f))) <= -1.999999936531045e-19f) {
tmp = -s * (((float) M_PI) / s);
} else {
tmp = -s * logf(1.0f);
}
return tmp;
}
function code(u, s) t_0 = Float32(Float32(1.0) / Float32(Float32(1.0) + exp(Float32(Float32(pi) / s)))) tmp = Float32(0.0) if (Float32(Float32(-s) * log(Float32(Float32(Float32(1.0) / Float32(Float32(u * Float32(Float32(Float32(1.0) / Float32(Float32(1.0) + exp(Float32(Float32(-Float32(pi)) / s)))) - t_0)) + t_0)) - Float32(1.0)))) <= Float32(-1.999999936531045e-19)) tmp = Float32(Float32(-s) * Float32(Float32(pi) / s)); else tmp = Float32(Float32(-s) * log(Float32(1.0))); end return tmp end
function tmp_2 = code(u, s) t_0 = single(1.0) / (single(1.0) + exp((single(pi) / s))); tmp = single(0.0); if ((-s * log(((single(1.0) / ((u * ((single(1.0) / (single(1.0) + exp((-single(pi) / s)))) - t_0)) + t_0)) - single(1.0)))) <= single(-1.999999936531045e-19)) tmp = -s * (single(pi) / s); else tmp = -s * log(single(1.0)); end tmp_2 = tmp; end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{1}{1 + e^{\frac{\pi}{s}}}\\
\mathbf{if}\;\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - t\_0\right) + t\_0} - 1\right) \leq -1.999999936531045 \cdot 10^{-19}:\\
\;\;\;\;\left(-s\right) \cdot \frac{\pi}{s}\\
\mathbf{else}:\\
\;\;\;\;\left(-s\right) \cdot \log 1\\
\end{array}
\end{array}
if (*.f32 (neg.f32 s) (log.f32 (-.f32 (/.f32 #s(literal 1 binary32) (+.f32 (*.f32 u (-.f32 (/.f32 #s(literal 1 binary32) (+.f32 #s(literal 1 binary32) (exp.f32 (/.f32 (neg.f32 (PI.f32)) s)))) (/.f32 #s(literal 1 binary32) (+.f32 #s(literal 1 binary32) (exp.f32 (/.f32 (PI.f32) s)))))) (/.f32 #s(literal 1 binary32) (+.f32 #s(literal 1 binary32) (exp.f32 (/.f32 (PI.f32) s)))))) #s(literal 1 binary32)))) < -1.99999994e-19Initial program 98.9%
Taylor expanded in u around 0
lower-/.f32N/A
lower-PI.f3211.5
Applied rewrites11.5%
if -1.99999994e-19 < (*.f32 (neg.f32 s) (log.f32 (-.f32 (/.f32 #s(literal 1 binary32) (+.f32 (*.f32 u (-.f32 (/.f32 #s(literal 1 binary32) (+.f32 #s(literal 1 binary32) (exp.f32 (/.f32 (neg.f32 (PI.f32)) s)))) (/.f32 #s(literal 1 binary32) (+.f32 #s(literal 1 binary32) (exp.f32 (/.f32 (PI.f32) s)))))) (/.f32 #s(literal 1 binary32) (+.f32 #s(literal 1 binary32) (exp.f32 (/.f32 (PI.f32) s)))))) #s(literal 1 binary32)))) Initial program 98.9%
Taylor expanded in s around inf
Applied rewrites10.3%
(FPCore (u s) :precision binary32 (- PI))
float code(float u, float s) {
return -((float) M_PI);
}
function code(u, s) return Float32(-Float32(pi)) end
function tmp = code(u, s) tmp = -single(pi); end
\begin{array}{l}
\\
-\pi
\end{array}
Initial program 98.9%
Taylor expanded in u around 0
lower-*.f32N/A
lower-PI.f3211.5
Applied rewrites11.5%
lift-*.f32N/A
mul-1-negN/A
lift-neg.f3211.5
Applied rewrites11.5%
herbie shell --seed 2025157
(FPCore (u s)
:name "Sample trimmed logistic on [-pi, pi]"
:precision binary32
:pre (and (and (<= 2.328306437e-10 u) (<= u 1.0)) (and (<= 0.0 s) (<= s 1.0651631)))
(* (- s) (log (- (/ 1.0 (+ (* u (- (/ 1.0 (+ 1.0 (exp (/ (- PI) s)))) (/ 1.0 (+ 1.0 (exp (/ PI s)))))) (/ 1.0 (+ 1.0 (exp (/ PI s)))))) 1.0))))