
(FPCore (s u) :precision binary32 (* s (log (/ 1.0 (- 1.0 (* 4.0 u))))))
float code(float s, float u) {
return s * logf((1.0f / (1.0f - (4.0f * u))));
}
real(4) function code(s, u)
use fmin_fmax_functions
real(4), intent (in) :: s
real(4), intent (in) :: u
code = s * log((1.0e0 / (1.0e0 - (4.0e0 * u))))
end function
function code(s, u) return Float32(s * log(Float32(Float32(1.0) / Float32(Float32(1.0) - Float32(Float32(4.0) * u))))) end
function tmp = code(s, u) tmp = s * log((single(1.0) / (single(1.0) - (single(4.0) * u)))); end
s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right)
Herbie found 14 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (s u) :precision binary32 (* s (log (/ 1.0 (- 1.0 (* 4.0 u))))))
float code(float s, float u) {
return s * logf((1.0f / (1.0f - (4.0f * u))));
}
real(4) function code(s, u)
use fmin_fmax_functions
real(4), intent (in) :: s
real(4), intent (in) :: u
code = s * log((1.0e0 / (1.0e0 - (4.0e0 * u))))
end function
function code(s, u) return Float32(s * log(Float32(Float32(1.0) / Float32(Float32(1.0) - Float32(Float32(4.0) * u))))) end
function tmp = code(s, u) tmp = s * log((single(1.0) / (single(1.0) - (single(4.0) * u)))); end
s \cdot \log \left(\frac{1}{1 - 4 \cdot u}\right)
(FPCore (s u) :precision binary32 (if (<= (- 1.0 (* 4.0 u)) 0.9599999785423279) (* s (* -0.5 (log (* (fma u 4.0 -1.0) (fma u 4.0 -1.0))))) (* (fma (* (fma (fma 64.0 u 21.333333333333332) u 8.0) s) u (* 4.0 s)) u)))
float code(float s, float u) {
float tmp;
if ((1.0f - (4.0f * u)) <= 0.9599999785423279f) {
tmp = s * (-0.5f * logf((fmaf(u, 4.0f, -1.0f) * fmaf(u, 4.0f, -1.0f))));
} else {
tmp = fmaf((fmaf(fmaf(64.0f, u, 21.333333333333332f), u, 8.0f) * s), u, (4.0f * s)) * u;
}
return tmp;
}
function code(s, u) tmp = Float32(0.0) if (Float32(Float32(1.0) - Float32(Float32(4.0) * u)) <= Float32(0.9599999785423279)) tmp = Float32(s * Float32(Float32(-0.5) * log(Float32(fma(u, Float32(4.0), Float32(-1.0)) * fma(u, Float32(4.0), Float32(-1.0)))))); else tmp = Float32(fma(Float32(fma(fma(Float32(64.0), u, Float32(21.333333333333332)), u, Float32(8.0)) * s), u, Float32(Float32(4.0) * s)) * u); end return tmp end
\begin{array}{l}
\mathbf{if}\;1 - 4 \cdot u \leq 0.9599999785423279:\\
\;\;\;\;s \cdot \left(-0.5 \cdot \log \left(\mathsf{fma}\left(u, 4, -1\right) \cdot \mathsf{fma}\left(u, 4, -1\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right) \cdot s, u, 4 \cdot s\right) \cdot u\\
\end{array}
if (-.f32 #s(literal 1 binary32) (*.f32 #s(literal 4 binary32) u)) < 0.959999979Initial program 60.8%
Applied rewrites63.2%
if 0.959999979 < (-.f32 #s(literal 1 binary32) (*.f32 #s(literal 4 binary32) u)) Initial program 60.8%
Taylor expanded in u around 0
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-*.f3293.5%
Applied rewrites93.5%
lift-*.f32N/A
lift-fma.f32N/A
distribute-rgt-inN/A
associate-*r*N/A
lift-*.f32N/A
lift-*.f32N/A
add-flipN/A
distribute-rgt-neg-inN/A
*-commutativeN/A
distribute-lft-neg-outN/A
sub-flipN/A
lift-*.f32N/A
lift-*.f32N/A
*-commutativeN/A
associate-*r*N/A
remove-double-negN/A
lower-fma.f32N/A
Applied rewrites94.0%
lift-fma.f32N/A
lift-*.f32N/A
associate-*l*N/A
lift-*.f32N/A
lift-*.f32N/A
associate-*l*N/A
distribute-lft-outN/A
*-commutativeN/A
lower-*.f32N/A
Applied rewrites93.5%
(FPCore (s u) :precision binary32 (if (<= (- 1.0 (* 4.0 u)) 0.968999981880188) (* (- (log (fma -4.0 u 1.0))) s) (* (fma (* (fma (fma 64.0 u 21.333333333333332) u 8.0) s) u (* 4.0 s)) u)))
float code(float s, float u) {
float tmp;
if ((1.0f - (4.0f * u)) <= 0.968999981880188f) {
tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
} else {
tmp = fmaf((fmaf(fmaf(64.0f, u, 21.333333333333332f), u, 8.0f) * s), u, (4.0f * s)) * u;
}
return tmp;
}
function code(s, u) tmp = Float32(0.0) if (Float32(Float32(1.0) - Float32(Float32(4.0) * u)) <= Float32(0.968999981880188)) tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s); else tmp = Float32(fma(Float32(fma(fma(Float32(64.0), u, Float32(21.333333333333332)), u, Float32(8.0)) * s), u, Float32(Float32(4.0) * s)) * u); end return tmp end
\begin{array}{l}
\mathbf{if}\;1 - 4 \cdot u \leq 0.968999981880188:\\
\;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right) \cdot s, u, 4 \cdot s\right) \cdot u\\
\end{array}
if (-.f32 #s(literal 1 binary32) (*.f32 #s(literal 4 binary32) u)) < 0.968999982Initial program 60.8%
Applied rewrites63.2%
if 0.968999982 < (-.f32 #s(literal 1 binary32) (*.f32 #s(literal 4 binary32) u)) Initial program 60.8%
Taylor expanded in u around 0
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-*.f3293.5%
Applied rewrites93.5%
lift-*.f32N/A
lift-fma.f32N/A
distribute-rgt-inN/A
associate-*r*N/A
lift-*.f32N/A
lift-*.f32N/A
add-flipN/A
distribute-rgt-neg-inN/A
*-commutativeN/A
distribute-lft-neg-outN/A
sub-flipN/A
lift-*.f32N/A
lift-*.f32N/A
*-commutativeN/A
associate-*r*N/A
remove-double-negN/A
lower-fma.f32N/A
Applied rewrites94.0%
lift-fma.f32N/A
lift-*.f32N/A
associate-*l*N/A
lift-*.f32N/A
lift-*.f32N/A
associate-*l*N/A
distribute-lft-outN/A
*-commutativeN/A
lower-*.f32N/A
Applied rewrites93.5%
(FPCore (s u) :precision binary32 (* s (* -0.5 (log1p (* u (- (* 16.0 u) 8.0))))))
float code(float s, float u) {
return s * (-0.5f * log1pf((u * ((16.0f * u) - 8.0f))));
}
function code(s, u) return Float32(s * Float32(Float32(-0.5) * log1p(Float32(u * Float32(Float32(Float32(16.0) * u) - Float32(8.0)))))) end
s \cdot \left(-0.5 \cdot \mathsf{log1p}\left(u \cdot \left(16 \cdot u - 8\right)\right)\right)
Initial program 60.8%
Applied rewrites63.2%
lower-log.f32N/A
lift-*.f32N/A
fabs-sqrN/A
lift-*.f32N/A
rem-exp-logN/A
lift-log.f32N/A
lift-log.f32N/A
rem-exp-logN/A
lift-*.f32N/A
fabs-sqrN/A
pow2N/A
lift-fma.f32N/A
lift-*.f32N/A
sum-square-powN/A
metadata-evalN/A
+-commutativeN/A
lower-log1p.f32N/A
Applied rewrites98.9%
Taylor expanded in u around 0
lower-*.f32N/A
lower--.f32N/A
lower-*.f3298.9%
Applied rewrites98.9%
(FPCore (s u) :precision binary32 (if (<= (- 1.0 (* 4.0 u)) 0.968999981880188) (* (- (log (fma -4.0 u 1.0))) s) (* (* s (fma (fma (fma 64.0 u 21.333333333333332) u 8.0) u 4.0)) u)))
float code(float s, float u) {
float tmp;
if ((1.0f - (4.0f * u)) <= 0.968999981880188f) {
tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
} else {
tmp = (s * fmaf(fmaf(fmaf(64.0f, u, 21.333333333333332f), u, 8.0f), u, 4.0f)) * u;
}
return tmp;
}
function code(s, u) tmp = Float32(0.0) if (Float32(Float32(1.0) - Float32(Float32(4.0) * u)) <= Float32(0.968999981880188)) tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s); else tmp = Float32(Float32(s * fma(fma(fma(Float32(64.0), u, Float32(21.333333333333332)), u, Float32(8.0)), u, Float32(4.0))) * u); end return tmp end
\begin{array}{l}
\mathbf{if}\;1 - 4 \cdot u \leq 0.968999981880188:\\
\;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\
\mathbf{else}:\\
\;\;\;\;\left(s \cdot \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(64, u, 21.333333333333332\right), u, 8\right), u, 4\right)\right) \cdot u\\
\end{array}
if (-.f32 #s(literal 1 binary32) (*.f32 #s(literal 4 binary32) u)) < 0.968999982Initial program 60.8%
Applied rewrites63.2%
if 0.968999982 < (-.f32 #s(literal 1 binary32) (*.f32 #s(literal 4 binary32) u)) Initial program 60.8%
Taylor expanded in u around 0
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-*.f3293.5%
Applied rewrites93.5%
lift-*.f32N/A
lift-fma.f32N/A
distribute-rgt-inN/A
associate-*r*N/A
lift-*.f32N/A
lift-*.f32N/A
add-flipN/A
distribute-rgt-neg-inN/A
*-commutativeN/A
distribute-lft-neg-outN/A
sub-flipN/A
lift-*.f32N/A
lift-*.f32N/A
*-commutativeN/A
associate-*r*N/A
remove-double-negN/A
lower-fma.f32N/A
Applied rewrites94.0%
lift-fma.f32N/A
lift-*.f32N/A
associate-*l*N/A
lift-*.f32N/A
lift-*.f32N/A
associate-*l*N/A
distribute-lft-outN/A
*-commutativeN/A
lower-*.f32N/A
Applied rewrites93.5%
lift-fma.f32N/A
lift-*.f32N/A
*-commutativeN/A
associate-*l*N/A
lift-*.f32N/A
*-commutativeN/A
distribute-lft-outN/A
lower-*.f32N/A
lower-fma.f3293.3%
Applied rewrites93.3%
(FPCore (s u) :precision binary32 (if (<= (- 1.0 (* 4.0 u)) 0.9850000143051147) (* (- (log (fma -4.0 u 1.0))) s) (* (fma (* (fma 21.333333333333332 u 8.0) s) u (* 4.0 s)) u)))
float code(float s, float u) {
float tmp;
if ((1.0f - (4.0f * u)) <= 0.9850000143051147f) {
tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
} else {
tmp = fmaf((fmaf(21.333333333333332f, u, 8.0f) * s), u, (4.0f * s)) * u;
}
return tmp;
}
function code(s, u) tmp = Float32(0.0) if (Float32(Float32(1.0) - Float32(Float32(4.0) * u)) <= Float32(0.9850000143051147)) tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s); else tmp = Float32(fma(Float32(fma(Float32(21.333333333333332), u, Float32(8.0)) * s), u, Float32(Float32(4.0) * s)) * u); end return tmp end
\begin{array}{l}
\mathbf{if}\;1 - 4 \cdot u \leq 0.9850000143051147:\\
\;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(21.333333333333332, u, 8\right) \cdot s, u, 4 \cdot s\right) \cdot u\\
\end{array}
if (-.f32 #s(literal 1 binary32) (*.f32 #s(literal 4 binary32) u)) < 0.985000014Initial program 60.8%
Applied rewrites63.2%
if 0.985000014 < (-.f32 #s(literal 1 binary32) (*.f32 #s(literal 4 binary32) u)) Initial program 60.8%
Taylor expanded in u around 0
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-*.f3293.5%
Applied rewrites93.5%
lift-*.f32N/A
lift-fma.f32N/A
distribute-rgt-inN/A
associate-*r*N/A
lift-*.f32N/A
lift-*.f32N/A
add-flipN/A
distribute-rgt-neg-inN/A
*-commutativeN/A
distribute-lft-neg-outN/A
sub-flipN/A
lift-*.f32N/A
lift-*.f32N/A
*-commutativeN/A
associate-*r*N/A
remove-double-negN/A
lower-fma.f32N/A
Applied rewrites94.0%
lift-fma.f32N/A
lift-*.f32N/A
associate-*l*N/A
lift-*.f32N/A
lift-*.f32N/A
associate-*l*N/A
distribute-lft-outN/A
*-commutativeN/A
lower-*.f32N/A
Applied rewrites93.5%
Taylor expanded in u around 0
Applied rewrites91.5%
(FPCore (s u) :precision binary32 (if (<= u 0.004000000189989805) (* (- u (* (fma (fma -21.333333333333332 u -8.0) u -3.0) u)) s) (* (- (log (fma -4.0 u 1.0))) s)))
float code(float s, float u) {
float tmp;
if (u <= 0.004000000189989805f) {
tmp = (u - (fmaf(fmaf(-21.333333333333332f, u, -8.0f), u, -3.0f) * u)) * s;
} else {
tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
}
return tmp;
}
function code(s, u) tmp = Float32(0.0) if (u <= Float32(0.004000000189989805)) tmp = Float32(Float32(u - Float32(fma(fma(Float32(-21.333333333333332), u, Float32(-8.0)), u, Float32(-3.0)) * u)) * s); else tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s); end return tmp end
\begin{array}{l}
\mathbf{if}\;u \leq 0.004000000189989805:\\
\;\;\;\;\left(u - \mathsf{fma}\left(\mathsf{fma}\left(-21.333333333333332, u, -8\right), u, -3\right) \cdot u\right) \cdot s\\
\mathbf{else}:\\
\;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\
\end{array}
if u < 0.00400000019Initial program 60.8%
Taylor expanded in u around 0
lower-*.f32N/A
lower-+.f32N/A
lower-*.f32N/A
lower-+.f32N/A
lower-*.f3291.2%
Applied rewrites91.2%
Applied rewrites91.2%
lift-fma.f32N/A
metadata-evalN/A
associate-+r+N/A
lower-+.f32N/A
lower-fma.f3291.1%
Applied rewrites91.1%
lift-*.f32N/A
*-commutativeN/A
lift-+.f32N/A
+-commutativeN/A
distribute-rgt-inN/A
fp-cancel-sign-sub-invN/A
*-lft-identityN/A
lower--.f32N/A
lower-*.f32N/A
Applied rewrites91.3%
if 0.00400000019 < u Initial program 60.8%
Applied rewrites63.2%
(FPCore (s u) :precision binary32 (if (<= u 0.004000000189989805) (* (fma (fma (fma 21.333333333333332 u 8.0) u 3.0) u u) s) (* (- (log (fma -4.0 u 1.0))) s)))
float code(float s, float u) {
float tmp;
if (u <= 0.004000000189989805f) {
tmp = fmaf(fmaf(fmaf(21.333333333333332f, u, 8.0f), u, 3.0f), u, u) * s;
} else {
tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
}
return tmp;
}
function code(s, u) tmp = Float32(0.0) if (u <= Float32(0.004000000189989805)) tmp = Float32(fma(fma(fma(Float32(21.333333333333332), u, Float32(8.0)), u, Float32(3.0)), u, u) * s); else tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s); end return tmp end
\begin{array}{l}
\mathbf{if}\;u \leq 0.004000000189989805:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(21.333333333333332, u, 8\right), u, 3\right), u, u\right) \cdot s\\
\mathbf{else}:\\
\;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\
\end{array}
if u < 0.00400000019Initial program 60.8%
Taylor expanded in u around 0
lower-*.f32N/A
lower-+.f32N/A
lower-*.f32N/A
lower-+.f32N/A
lower-*.f3291.2%
Applied rewrites91.2%
Applied rewrites91.2%
lift-fma.f32N/A
metadata-evalN/A
associate-+r+N/A
lower-+.f32N/A
lower-fma.f3291.1%
Applied rewrites91.1%
lift-*.f32N/A
lift-+.f32N/A
distribute-lft1-inN/A
lower-fma.f3291.4%
Applied rewrites91.4%
if 0.00400000019 < u Initial program 60.8%
Applied rewrites63.2%
(FPCore (s u) :precision binary32 (if (<= u 0.004000000189989805) (* (* (fma (fma 21.333333333333332 u 8.0) u 4.0) u) s) (* (- (log (fma -4.0 u 1.0))) s)))
float code(float s, float u) {
float tmp;
if (u <= 0.004000000189989805f) {
tmp = (fmaf(fmaf(21.333333333333332f, u, 8.0f), u, 4.0f) * u) * s;
} else {
tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
}
return tmp;
}
function code(s, u) tmp = Float32(0.0) if (u <= Float32(0.004000000189989805)) tmp = Float32(Float32(fma(fma(Float32(21.333333333333332), u, Float32(8.0)), u, Float32(4.0)) * u) * s); else tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s); end return tmp end
\begin{array}{l}
\mathbf{if}\;u \leq 0.004000000189989805:\\
\;\;\;\;\left(\mathsf{fma}\left(\mathsf{fma}\left(21.333333333333332, u, 8\right), u, 4\right) \cdot u\right) \cdot s\\
\mathbf{else}:\\
\;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\
\end{array}
if u < 0.00400000019Initial program 60.8%
Taylor expanded in u around 0
lower-*.f32N/A
lower-+.f32N/A
lower-*.f32N/A
lower-+.f32N/A
lower-*.f3291.2%
Applied rewrites91.2%
Applied rewrites91.2%
if 0.00400000019 < u Initial program 60.8%
Applied rewrites63.2%
(FPCore (s u) :precision binary32 (if (<= u 0.0007999999797903001) (* u (fma 4.0 s (* 8.0 (* s u)))) (* (- (log (fma -4.0 u 1.0))) s)))
float code(float s, float u) {
float tmp;
if (u <= 0.0007999999797903001f) {
tmp = u * fmaf(4.0f, s, (8.0f * (s * u)));
} else {
tmp = -logf(fmaf(-4.0f, u, 1.0f)) * s;
}
return tmp;
}
function code(s, u) tmp = Float32(0.0) if (u <= Float32(0.0007999999797903001)) tmp = Float32(u * fma(Float32(4.0), s, Float32(Float32(8.0) * Float32(s * u)))); else tmp = Float32(Float32(-log(fma(Float32(-4.0), u, Float32(1.0)))) * s); end return tmp end
\begin{array}{l}
\mathbf{if}\;u \leq 0.0007999999797903001:\\
\;\;\;\;u \cdot \mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(-\log \left(\mathsf{fma}\left(-4, u, 1\right)\right)\right) \cdot s\\
\end{array}
if u < 7.9999998e-4Initial program 60.8%
Taylor expanded in u around 0
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-*.f3287.3%
Applied rewrites87.3%
if 7.9999998e-4 < u Initial program 60.8%
Applied rewrites63.2%
(FPCore (s u) :precision binary32 (* u (fma 4.0 s (* 8.0 (* s u)))))
float code(float s, float u) {
return u * fmaf(4.0f, s, (8.0f * (s * u)));
}
function code(s, u) return Float32(u * fma(Float32(4.0), s, Float32(Float32(8.0) * Float32(s * u)))) end
u \cdot \mathsf{fma}\left(4, s, 8 \cdot \left(s \cdot u\right)\right)
Initial program 60.8%
Taylor expanded in u around 0
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-*.f3287.3%
Applied rewrites87.3%
(FPCore (s u) :precision binary32 (* (* (fma 8.0 u 4.0) u) s))
float code(float s, float u) {
return (fmaf(8.0f, u, 4.0f) * u) * s;
}
function code(s, u) return Float32(Float32(fma(Float32(8.0), u, Float32(4.0)) * u) * s) end
\left(\mathsf{fma}\left(8, u, 4\right) \cdot u\right) \cdot s
Initial program 60.8%
Taylor expanded in u around 0
lower-*.f32N/A
lower-+.f32N/A
lower-*.f32N/A
lower-+.f32N/A
lower-*.f3291.2%
Applied rewrites91.2%
Applied rewrites91.2%
Taylor expanded in u around 0
Applied rewrites87.1%
(FPCore (s u) :precision binary32 (* s (* u 4.0)))
float code(float s, float u) {
return s * (u * 4.0f);
}
real(4) function code(s, u)
use fmin_fmax_functions
real(4), intent (in) :: s
real(4), intent (in) :: u
code = s * (u * 4.0e0)
end function
function code(s, u) return Float32(s * Float32(u * Float32(4.0))) end
function tmp = code(s, u) tmp = s * (u * single(4.0)); end
s \cdot \left(u \cdot 4\right)
Initial program 60.8%
Taylor expanded in u around 0
lower-*.f32N/A
lower-+.f32N/A
lower-*.f32N/A
lower-+.f32N/A
lower-*.f3291.2%
Applied rewrites91.2%
Taylor expanded in u around 0
Applied rewrites74.4%
(FPCore (s u) :precision binary32 (* 4.0 (* s u)))
float code(float s, float u) {
return 4.0f * (s * u);
}
real(4) function code(s, u)
use fmin_fmax_functions
real(4), intent (in) :: s
real(4), intent (in) :: u
code = 4.0e0 * (s * u)
end function
function code(s, u) return Float32(Float32(4.0) * Float32(s * u)) end
function tmp = code(s, u) tmp = single(4.0) * (s * u); end
4 \cdot \left(s \cdot u\right)
Initial program 60.8%
Taylor expanded in u around 0
lower-*.f32N/A
lower-*.f3274.2%
Applied rewrites74.2%
(FPCore (s u) :precision binary32 0.0)
float code(float s, float u) {
return 0.0f;
}
real(4) function code(s, u)
use fmin_fmax_functions
real(4), intent (in) :: s
real(4), intent (in) :: u
code = 0.0e0
end function
function code(s, u) return Float32(0.0) end
function tmp = code(s, u) tmp = single(0.0); end
0
Initial program 60.8%
lift--.f32N/A
lift-*.f32N/A
*-commutativeN/A
fp-cancel-sub-sign-invN/A
*-commutativeN/A
fp-cancel-sign-sub-invN/A
*-commutativeN/A
distribute-lft-neg-inN/A
distribute-rgt-neg-outN/A
remove-double-negN/A
metadata-evalN/A
distribute-lft-inN/A
*-rgt-identityN/A
associate--r+N/A
lower--.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f3260.1%
Applied rewrites60.1%
Applied rewrites16.6%
herbie shell --seed 2025322
(FPCore (s u)
:name "Disney BSSRDF, sample scattering profile, lower"
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0)) (and (<= 2.328306437e-10 u) (<= u 0.25)))
(* s (log (/ 1.0 (- 1.0 (* 4.0 u))))))