Sample trimmed logistic on [-pi, pi]

Percentage Accurate: 98.9% → 99.0%
Time: 5.1s
Alternatives: 10
Speedup: 1.0×

Specification

?
\[\left(2.328306437 \cdot 10^{-10} \leq u \land u \leq 1\right) \land \left(0 \leq s \land s \leq 1.0651631\right)\]
\[\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}

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.

Accuracy vs Speed?

Herbie found 10 alternatives:

AlternativeAccuracySpeedup
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.

Initial Program: 98.9% accurate, 1.0× speedup?

\[\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}

Alternative 1: 99.0% accurate, 0.5× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := e^{\frac{\pi}{s}}\\ t_1 := \left(\frac{1}{\mathsf{fma}\left(t\_0, u, u\right)} - \left(\frac{1}{t\_0 - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\\ \left(-s\right) \cdot \log \left(\frac{1}{\frac{t\_1 \cdot 2}{\mathsf{fma}\left(-2, t\_1, 2\right)}}\right) \end{array} \end{array} \]
(FPCore (u s)
 :precision binary32
 (let* ((t_0 (exp (/ PI s)))
        (t_1
         (*
          (-
           (/ 1.0 (fma t_0 u u))
           (- (/ 1.0 (- t_0 -1.0)) (/ -1.0 (- -1.0 (exp (/ (- PI) s))))))
          u)))
   (* (- s) (log (/ 1.0 (/ (* t_1 2.0) (fma -2.0 t_1 2.0)))))))
float code(float u, float s) {
	float t_0 = expf((((float) M_PI) / s));
	float t_1 = ((1.0f / fmaf(t_0, u, u)) - ((1.0f / (t_0 - -1.0f)) - (-1.0f / (-1.0f - expf((-((float) M_PI) / s)))))) * u;
	return -s * logf((1.0f / ((t_1 * 2.0f) / fmaf(-2.0f, t_1, 2.0f))));
}
function code(u, s)
	t_0 = exp(Float32(Float32(pi) / s))
	t_1 = Float32(Float32(Float32(Float32(1.0) / fma(t_0, u, u)) - Float32(Float32(Float32(1.0) / Float32(t_0 - Float32(-1.0))) - Float32(Float32(-1.0) / Float32(Float32(-1.0) - exp(Float32(Float32(-Float32(pi)) / s)))))) * u)
	return Float32(Float32(-s) * log(Float32(Float32(1.0) / Float32(Float32(t_1 * Float32(2.0)) / fma(Float32(-2.0), t_1, Float32(2.0))))))
end
\begin{array}{l}

\\
\begin{array}{l}
t_0 := e^{\frac{\pi}{s}}\\
t_1 := \left(\frac{1}{\mathsf{fma}\left(t\_0, u, u\right)} - \left(\frac{1}{t\_0 - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\\
\left(-s\right) \cdot \log \left(\frac{1}{\frac{t\_1 \cdot 2}{\mathsf{fma}\left(-2, t\_1, 2\right)}}\right)
\end{array}
\end{array}
Derivation
  1. Initial program 98.9%

    \[\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
  2. Taylor expanded in u around -inf

    \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{\color{blue}{-1 \cdot \left(u \cdot \left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right) - \frac{1}{u \cdot \left(1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}\right)}\right)\right)}} - 1\right) \]
  3. Step-by-step derivation
    1. lower-*.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{-1 \cdot \color{blue}{\left(u \cdot \left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right) - \frac{1}{u \cdot \left(1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}\right)}\right)\right)}} - 1\right) \]
    2. lower-*.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{-1 \cdot \left(u \cdot \color{blue}{\left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right) - \frac{1}{u \cdot \left(1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}\right)}\right)}\right)} - 1\right) \]
    3. lower--.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{-1 \cdot \left(u \cdot \left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right) - \color{blue}{\frac{1}{u \cdot \left(1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}\right)}}\right)\right)} - 1\right) \]
  4. Applied rewrites98.9%

    \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{\color{blue}{-1 \cdot \left(u \cdot \left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) - \frac{1}{u \cdot \left(1 + e^{\frac{\pi}{s}}\right)}\right)\right)}} - 1\right) \]
  5. Applied rewrites99.0%

    \[\leadsto \left(-s\right) \cdot \log \color{blue}{\left(\frac{2 - \left(\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\right) \cdot 2}{\left(\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\right) \cdot 2}\right)} \]
  6. Step-by-step derivation
    1. lift-/.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \color{blue}{\left(\frac{2 - \left(\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\right) \cdot 2}{\left(\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\right) \cdot 2}\right)} \]
  7. Applied rewrites99.0%

    \[\leadsto \left(-s\right) \cdot \log \color{blue}{\left(\frac{1}{\frac{\left(\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\right) \cdot 2}{\mathsf{fma}\left(-2, \left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u, 2\right)}}\right)} \]
  8. Add Preprocessing

Alternative 2: 99.0% accurate, 0.5× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := e^{\frac{\pi}{s}}\\ t_1 := \left(\frac{1}{\mathsf{fma}\left(t\_0, u, u\right)} - \left(\frac{1}{t\_0 - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\\ s \cdot \log \left(2 \cdot \frac{t\_1}{\mathsf{fma}\left(-2, t\_1, 2\right)}\right) \end{array} \end{array} \]
(FPCore (u s)
 :precision binary32
 (let* ((t_0 (exp (/ PI s)))
        (t_1
         (*
          (-
           (/ 1.0 (fma t_0 u u))
           (- (/ 1.0 (- t_0 -1.0)) (/ -1.0 (- -1.0 (exp (/ (- PI) s))))))
          u)))
   (* s (log (* 2.0 (/ t_1 (fma -2.0 t_1 2.0)))))))
float code(float u, float s) {
	float t_0 = expf((((float) M_PI) / s));
	float t_1 = ((1.0f / fmaf(t_0, u, u)) - ((1.0f / (t_0 - -1.0f)) - (-1.0f / (-1.0f - expf((-((float) M_PI) / s)))))) * u;
	return s * logf((2.0f * (t_1 / fmaf(-2.0f, t_1, 2.0f))));
}
function code(u, s)
	t_0 = exp(Float32(Float32(pi) / s))
	t_1 = Float32(Float32(Float32(Float32(1.0) / fma(t_0, u, u)) - Float32(Float32(Float32(1.0) / Float32(t_0 - Float32(-1.0))) - Float32(Float32(-1.0) / Float32(Float32(-1.0) - exp(Float32(Float32(-Float32(pi)) / s)))))) * u)
	return Float32(s * log(Float32(Float32(2.0) * Float32(t_1 / fma(Float32(-2.0), t_1, Float32(2.0))))))
end
\begin{array}{l}

\\
\begin{array}{l}
t_0 := e^{\frac{\pi}{s}}\\
t_1 := \left(\frac{1}{\mathsf{fma}\left(t\_0, u, u\right)} - \left(\frac{1}{t\_0 - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\\
s \cdot \log \left(2 \cdot \frac{t\_1}{\mathsf{fma}\left(-2, t\_1, 2\right)}\right)
\end{array}
\end{array}
Derivation
  1. Initial program 98.9%

    \[\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
  2. Taylor expanded in u around -inf

    \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{\color{blue}{-1 \cdot \left(u \cdot \left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right) - \frac{1}{u \cdot \left(1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}\right)}\right)\right)}} - 1\right) \]
  3. Step-by-step derivation
    1. lower-*.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{-1 \cdot \color{blue}{\left(u \cdot \left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right) - \frac{1}{u \cdot \left(1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}\right)}\right)\right)}} - 1\right) \]
    2. lower-*.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{-1 \cdot \left(u \cdot \color{blue}{\left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right) - \frac{1}{u \cdot \left(1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}\right)}\right)}\right)} - 1\right) \]
    3. lower--.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{-1 \cdot \left(u \cdot \left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right) - \color{blue}{\frac{1}{u \cdot \left(1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}\right)}}\right)\right)} - 1\right) \]
  4. Applied rewrites98.9%

    \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{\color{blue}{-1 \cdot \left(u \cdot \left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) - \frac{1}{u \cdot \left(1 + e^{\frac{\pi}{s}}\right)}\right)\right)}} - 1\right) \]
  5. Applied rewrites99.0%

    \[\leadsto \left(-s\right) \cdot \log \color{blue}{\left(\frac{2 - \left(\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\right) \cdot 2}{\left(\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\right) \cdot 2}\right)} \]
  6. Step-by-step derivation
    1. lift-/.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \color{blue}{\left(\frac{2 - \left(\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\right) \cdot 2}{\left(\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\right) \cdot 2}\right)} \]
  7. Applied rewrites99.0%

    \[\leadsto \left(-s\right) \cdot \log \color{blue}{\left(\frac{1}{\frac{\left(\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\right) \cdot 2}{\mathsf{fma}\left(-2, \left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u, 2\right)}}\right)} \]
  8. Step-by-step derivation
    1. lift-*.f32N/A

      \[\leadsto \color{blue}{\left(-s\right) \cdot \log \left(\frac{1}{\frac{\left(\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u\right) \cdot 2}{\mathsf{fma}\left(-2, \left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u, 2\right)}}\right)} \]
  9. Applied rewrites99.0%

    \[\leadsto \color{blue}{s \cdot \log \left(2 \cdot \frac{\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u}{\mathsf{fma}\left(-2, \left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u, 2\right)}\right)} \]
  10. Add Preprocessing

Alternative 3: 98.9% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := e^{\frac{\pi}{s}}\\ \left(-s\right) \cdot \log \left(\frac{1}{\left(\frac{1}{\mathsf{fma}\left(t\_0, u, u\right)} - \left(\frac{1}{t\_0 - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u} - 1\right) \end{array} \end{array} \]
(FPCore (u s)
 :precision binary32
 (let* ((t_0 (exp (/ PI s))))
   (*
    (- s)
    (log
     (-
      (/
       1.0
       (*
        (-
         (/ 1.0 (fma t_0 u u))
         (- (/ 1.0 (- t_0 -1.0)) (/ -1.0 (- -1.0 (exp (/ (- PI) s))))))
        u))
      1.0)))))
float code(float u, float s) {
	float t_0 = expf((((float) M_PI) / s));
	return -s * logf(((1.0f / (((1.0f / fmaf(t_0, u, u)) - ((1.0f / (t_0 - -1.0f)) - (-1.0f / (-1.0f - expf((-((float) M_PI) / s)))))) * u)) - 1.0f));
}
function code(u, s)
	t_0 = exp(Float32(Float32(pi) / s))
	return Float32(Float32(-s) * log(Float32(Float32(Float32(1.0) / Float32(Float32(Float32(Float32(1.0) / fma(t_0, u, u)) - Float32(Float32(Float32(1.0) / Float32(t_0 - Float32(-1.0))) - Float32(Float32(-1.0) / Float32(Float32(-1.0) - exp(Float32(Float32(-Float32(pi)) / s)))))) * u)) - Float32(1.0))))
end
\begin{array}{l}

\\
\begin{array}{l}
t_0 := e^{\frac{\pi}{s}}\\
\left(-s\right) \cdot \log \left(\frac{1}{\left(\frac{1}{\mathsf{fma}\left(t\_0, u, u\right)} - \left(\frac{1}{t\_0 - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u} - 1\right)
\end{array}
\end{array}
Derivation
  1. Initial program 98.9%

    \[\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
  2. Taylor expanded in u around -inf

    \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{\color{blue}{-1 \cdot \left(u \cdot \left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right) - \frac{1}{u \cdot \left(1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}\right)}\right)\right)}} - 1\right) \]
  3. Step-by-step derivation
    1. lower-*.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{-1 \cdot \color{blue}{\left(u \cdot \left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right) - \frac{1}{u \cdot \left(1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}\right)}\right)\right)}} - 1\right) \]
    2. lower-*.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{-1 \cdot \left(u \cdot \color{blue}{\left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right) - \frac{1}{u \cdot \left(1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}\right)}\right)}\right)} - 1\right) \]
    3. lower--.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{-1 \cdot \left(u \cdot \left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right) - \color{blue}{\frac{1}{u \cdot \left(1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}\right)}}\right)\right)} - 1\right) \]
  4. Applied rewrites98.9%

    \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{\color{blue}{-1 \cdot \left(u \cdot \left(-1 \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) - \frac{1}{u \cdot \left(1 + e^{\frac{\pi}{s}}\right)}\right)\right)}} - 1\right) \]
  5. Applied rewrites98.9%

    \[\leadsto \color{blue}{\left(-s\right) \cdot \log \left(\frac{1}{\left(\frac{1}{\mathsf{fma}\left(e^{\frac{\pi}{s}}, u, u\right)} - \left(\frac{1}{e^{\frac{\pi}{s}} - -1} - \frac{-1}{-1 - e^{\frac{-\pi}{s}}}\right)\right) \cdot u} - 1\right)} \]
  6. Add Preprocessing

Alternative 4: 98.9% accurate, 1.0× speedup?

\[\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}
Derivation
  1. Initial program 98.9%

    \[\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
  2. Add Preprocessing

Alternative 5: 97.6% accurate, 1.3× speedup?

\[\begin{array}{l} \\ \left(-s\right) \cdot \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) \end{array} \]
(FPCore (u s)
 :precision binary32
 (*
  (- s)
  (log
   (-
    (/
     1.0
     (*
      u
      (-
       (/ 1.0 (+ 1.0 (exp (* -1.0 (/ PI s)))))
       (/ 1.0 (+ 1.0 (exp (/ PI s)))))))
    1.0))))
float code(float u, float s) {
	return -s * 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));
}
function code(u, s)
	return Float32(Float32(-s) * 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))))
end
function tmp = code(u, s)
	tmp = -s * 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)));
end
\begin{array}{l}

\\
\left(-s\right) \cdot \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)
\end{array}
Derivation
  1. Initial program 98.9%

    \[\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
  2. Taylor expanded in u around inf

    \[\leadsto \left(-s\right) \cdot \log \color{blue}{\left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right)} - 1\right)} \]
  3. Step-by-step derivation
    1. lower--.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{-1 \cdot \frac{\mathsf{PI}\left(\right)}{s}}} - \frac{1}{1 + e^{\frac{\mathsf{PI}\left(\right)}{s}}}\right)} - \color{blue}{1}\right) \]
  4. Applied rewrites97.6%

    \[\leadsto \left(-s\right) \cdot \log \color{blue}{\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)} \]
  5. Add Preprocessing

Alternative 6: 85.9% accurate, 1.3× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := \frac{1}{2 + \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 (+ 2.0 (/ 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 / (2.0f + (((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(2.0) + 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(2.0) + (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}{2 + \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}
Derivation
  1. Initial program 98.9%

    \[\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
  2. Taylor expanded in s around inf

    \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{\color{blue}{2 + \frac{\mathsf{PI}\left(\right)}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
  3. Step-by-step derivation
    1. lower-+.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{2 + \color{blue}{\frac{\mathsf{PI}\left(\right)}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
    2. lower-/.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{2 + \frac{\mathsf{PI}\left(\right)}{\color{blue}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
    3. lower-PI.f3294.8

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{2 + \frac{\pi}{s}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
  4. Applied rewrites94.8%

    \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{\color{blue}{2 + \frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
  5. Taylor expanded in s around inf

    \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{2 + \frac{\pi}{s}}\right) + \frac{1}{\color{blue}{2 + \frac{\mathsf{PI}\left(\right)}{s}}}} - 1\right) \]
  6. Step-by-step derivation
    1. lower-+.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{2 + \frac{\pi}{s}}\right) + \frac{1}{2 + \color{blue}{\frac{\mathsf{PI}\left(\right)}{s}}}} - 1\right) \]
    2. lower-/.f32N/A

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{2 + \frac{\pi}{s}}\right) + \frac{1}{2 + \frac{\mathsf{PI}\left(\right)}{\color{blue}{s}}}} - 1\right) \]
    3. lower-PI.f3285.9

      \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{2 + \frac{\pi}{s}}\right) + \frac{1}{2 + \frac{\pi}{s}}} - 1\right) \]
  7. Applied rewrites85.9%

    \[\leadsto \left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{2 + \frac{\pi}{s}}\right) + \frac{1}{\color{blue}{2 + \frac{\pi}{s}}}} - 1\right) \]
  8. Add Preprocessing

Alternative 7: 25.1% accurate, 5.1× speedup?

\[\begin{array}{l} \\ \left(-\log \left(1 + \frac{\pi}{s}\right)\right) \cdot s \end{array} \]
(FPCore (u s) :precision binary32 (* (- (log (+ 1.0 (/ PI s)))) s))
float code(float u, float s) {
	return -logf((1.0f + (((float) M_PI) / s))) * s;
}
function code(u, s)
	return Float32(Float32(-log(Float32(Float32(1.0) + Float32(Float32(pi) / s)))) * s)
end
function tmp = code(u, s)
	tmp = -log((single(1.0) + (single(pi) / s))) * s;
end
\begin{array}{l}

\\
\left(-\log \left(1 + \frac{\pi}{s}\right)\right) \cdot s
\end{array}
Derivation
  1. Initial program 98.9%

    \[\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
  2. Applied rewrites3.8%

    \[\leadsto \color{blue}{\left(-\log \left(\frac{1}{\frac{\mathsf{fma}\left(u, \frac{e^{\frac{\pi}{s}} - -1}{e^{\frac{-\pi}{s}} - -1} - 1, 1\right)}{e^{\frac{\pi}{s}} - -1}} - 1\right)\right) \cdot s} \]
  3. Taylor expanded in s around inf

    \[\leadsto \left(-\log \color{blue}{\left(\left(1 + \frac{\mathsf{PI}\left(\right)}{s}\right) - 2 \cdot \frac{u \cdot \left(\frac{1}{2} \cdot \mathsf{PI}\left(\right) - \frac{-1}{2} \cdot \mathsf{PI}\left(\right)\right)}{s}\right)}\right) \cdot s \]
  4. Step-by-step derivation
    1. lower--.f32N/A

      \[\leadsto \left(-\log \left(\left(1 + \frac{\mathsf{PI}\left(\right)}{s}\right) - \color{blue}{2 \cdot \frac{u \cdot \left(\frac{1}{2} \cdot \mathsf{PI}\left(\right) - \frac{-1}{2} \cdot \mathsf{PI}\left(\right)\right)}{s}}\right)\right) \cdot s \]
    2. lower-+.f32N/A

      \[\leadsto \left(-\log \left(\left(1 + \frac{\mathsf{PI}\left(\right)}{s}\right) - \color{blue}{2} \cdot \frac{u \cdot \left(\frac{1}{2} \cdot \mathsf{PI}\left(\right) - \frac{-1}{2} \cdot \mathsf{PI}\left(\right)\right)}{s}\right)\right) \cdot s \]
    3. lower-/.f32N/A

      \[\leadsto \left(-\log \left(\left(1 + \frac{\mathsf{PI}\left(\right)}{s}\right) - 2 \cdot \frac{u \cdot \left(\frac{1}{2} \cdot \mathsf{PI}\left(\right) - \frac{-1}{2} \cdot \mathsf{PI}\left(\right)\right)}{s}\right)\right) \cdot s \]
    4. lower-PI.f32N/A

      \[\leadsto \left(-\log \left(\left(1 + \frac{\pi}{s}\right) - 2 \cdot \frac{u \cdot \left(\frac{1}{2} \cdot \mathsf{PI}\left(\right) - \frac{-1}{2} \cdot \mathsf{PI}\left(\right)\right)}{s}\right)\right) \cdot s \]
    5. lower-*.f32N/A

      \[\leadsto \left(-\log \left(\left(1 + \frac{\pi}{s}\right) - 2 \cdot \color{blue}{\frac{u \cdot \left(\frac{1}{2} \cdot \mathsf{PI}\left(\right) - \frac{-1}{2} \cdot \mathsf{PI}\left(\right)\right)}{s}}\right)\right) \cdot s \]
    6. lower-/.f32N/A

      \[\leadsto \left(-\log \left(\left(1 + \frac{\pi}{s}\right) - 2 \cdot \frac{u \cdot \left(\frac{1}{2} \cdot \mathsf{PI}\left(\right) - \frac{-1}{2} \cdot \mathsf{PI}\left(\right)\right)}{\color{blue}{s}}\right)\right) \cdot s \]
  5. Applied rewrites24.8%

    \[\leadsto \left(-\log \color{blue}{\left(\left(1 + \frac{\pi}{s}\right) - 2 \cdot \frac{u \cdot \left(0.5 \cdot \pi - -0.5 \cdot \pi\right)}{s}\right)}\right) \cdot s \]
  6. Taylor expanded in u around 0

    \[\leadsto \left(-\log \left(1 + \color{blue}{\frac{\mathsf{PI}\left(\right)}{s}}\right)\right) \cdot s \]
  7. Step-by-step derivation
    1. lower-+.f32N/A

      \[\leadsto \left(-\log \left(1 + \frac{\mathsf{PI}\left(\right)}{\color{blue}{s}}\right)\right) \cdot s \]
    2. lower-/.f32N/A

      \[\leadsto \left(-\log \left(1 + \frac{\mathsf{PI}\left(\right)}{s}\right)\right) \cdot s \]
    3. lower-PI.f3225.1

      \[\leadsto \left(-\log \left(1 + \frac{\pi}{s}\right)\right) \cdot s \]
  8. Applied rewrites25.1%

    \[\leadsto \left(-\log \left(1 + \color{blue}{\frac{\pi}{s}}\right)\right) \cdot s \]
  9. Add Preprocessing

Alternative 8: 14.1% accurate, 0.9× speedup?

\[\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 \left(\frac{1}{s} \cdot \pi\right)\\ \mathbf{else}:\\ \;\;\;\;\left(-s\right) \cdot \log 1\\ \end{array} \end{array} \]
(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(Float32(1.0) / 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 \left(\frac{1}{s} \cdot \pi\right)\\

\mathbf{else}:\\
\;\;\;\;\left(-s\right) \cdot \log 1\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. 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-19

    1. Initial program 98.9%

      \[\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
    2. Taylor expanded in u around 0

      \[\leadsto \left(-s\right) \cdot \color{blue}{\frac{\mathsf{PI}\left(\right)}{s}} \]
    3. Step-by-step derivation
      1. lower-/.f32N/A

        \[\leadsto \left(-s\right) \cdot \frac{\mathsf{PI}\left(\right)}{\color{blue}{s}} \]
      2. lower-PI.f3211.3

        \[\leadsto \left(-s\right) \cdot \frac{\pi}{s} \]
    4. Applied rewrites11.3%

      \[\leadsto \left(-s\right) \cdot \color{blue}{\frac{\pi}{s}} \]
    5. Step-by-step derivation
      1. lift-/.f32N/A

        \[\leadsto \left(-s\right) \cdot \frac{\pi}{\color{blue}{s}} \]
      2. mult-flipN/A

        \[\leadsto \left(-s\right) \cdot \left(\pi \cdot \color{blue}{\frac{1}{s}}\right) \]
      3. *-commutativeN/A

        \[\leadsto \left(-s\right) \cdot \left(\frac{1}{s} \cdot \color{blue}{\pi}\right) \]
      4. lower-*.f32N/A

        \[\leadsto \left(-s\right) \cdot \left(\frac{1}{s} \cdot \color{blue}{\pi}\right) \]
      5. lower-/.f3211.3

        \[\leadsto \left(-s\right) \cdot \left(\frac{1}{s} \cdot \pi\right) \]
    6. Applied rewrites11.3%

      \[\leadsto \left(-s\right) \cdot \left(\frac{1}{s} \cdot \color{blue}{\pi}\right) \]

    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))))

    1. Initial program 98.9%

      \[\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
    2. Taylor expanded in s around inf

      \[\leadsto \left(-s\right) \cdot \log \color{blue}{1} \]
    3. Step-by-step derivation
      1. Applied rewrites10.3%

        \[\leadsto \left(-s\right) \cdot \log \color{blue}{1} \]
    4. Recombined 2 regimes into one program.
    5. Add Preprocessing

    Alternative 9: 14.1% accurate, 0.9× speedup?

    \[\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} \]
    (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}
    
    Derivation
    1. Split input into 2 regimes
    2. 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-19

      1. Initial program 98.9%

        \[\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
      2. Taylor expanded in u around 0

        \[\leadsto \left(-s\right) \cdot \color{blue}{\frac{\mathsf{PI}\left(\right)}{s}} \]
      3. Step-by-step derivation
        1. lower-/.f32N/A

          \[\leadsto \left(-s\right) \cdot \frac{\mathsf{PI}\left(\right)}{\color{blue}{s}} \]
        2. lower-PI.f3211.3

          \[\leadsto \left(-s\right) \cdot \frac{\pi}{s} \]
      4. Applied rewrites11.3%

        \[\leadsto \left(-s\right) \cdot \color{blue}{\frac{\pi}{s}} \]

      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))))

      1. Initial program 98.9%

        \[\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
      2. Taylor expanded in s around inf

        \[\leadsto \left(-s\right) \cdot \log \color{blue}{1} \]
      3. Step-by-step derivation
        1. Applied rewrites10.3%

          \[\leadsto \left(-s\right) \cdot \log \color{blue}{1} \]
      4. Recombined 2 regimes into one program.
      5. Add Preprocessing

      Alternative 10: 11.3% accurate, 46.3× speedup?

      \[\begin{array}{l} \\ -\pi \end{array} \]
      (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}
      
      Derivation
      1. Initial program 98.9%

        \[\left(-s\right) \cdot \log \left(\frac{1}{u \cdot \left(\frac{1}{1 + e^{\frac{-\pi}{s}}} - \frac{1}{1 + e^{\frac{\pi}{s}}}\right) + \frac{1}{1 + e^{\frac{\pi}{s}}}} - 1\right) \]
      2. Taylor expanded in u around 0

        \[\leadsto \color{blue}{-1 \cdot \mathsf{PI}\left(\right)} \]
      3. Step-by-step derivation
        1. lower-*.f32N/A

          \[\leadsto -1 \cdot \color{blue}{\mathsf{PI}\left(\right)} \]
        2. lower-PI.f3211.3

          \[\leadsto -1 \cdot \pi \]
      4. Applied rewrites11.3%

        \[\leadsto \color{blue}{-1 \cdot \pi} \]
      5. Step-by-step derivation
        1. lift-*.f32N/A

          \[\leadsto -1 \cdot \color{blue}{\pi} \]
        2. mul-1-negN/A

          \[\leadsto \mathsf{neg}\left(\pi\right) \]
        3. lift-neg.f3211.3

          \[\leadsto -\pi \]
      6. Applied rewrites11.3%

        \[\leadsto -\pi \]
      7. Add Preprocessing

      Reproduce

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