
(FPCore (x) :precision binary64 (* 0.5 (log1p (/ (* 2.0 x) (- 1.0 x)))))
double code(double x) {
return 0.5 * log1p(((2.0 * x) / (1.0 - x)));
}
public static double code(double x) {
return 0.5 * Math.log1p(((2.0 * x) / (1.0 - x)));
}
def code(x): return 0.5 * math.log1p(((2.0 * x) / (1.0 - x)))
function code(x) return Float64(0.5 * log1p(Float64(Float64(2.0 * x) / Float64(1.0 - x)))) end
code[x_] := N[(0.5 * N[Log[1 + N[(N[(2.0 * x), $MachinePrecision] / N[(1.0 - x), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
0.5 \cdot \mathsf{log1p}\left(\frac{2 \cdot x}{1 - x}\right)
Herbie found 1 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x) :precision binary64 (* 0.5 (log1p (/ (* 2.0 x) (- 1.0 x)))))
double code(double x) {
return 0.5 * log1p(((2.0 * x) / (1.0 - x)));
}
public static double code(double x) {
return 0.5 * Math.log1p(((2.0 * x) / (1.0 - x)));
}
def code(x): return 0.5 * math.log1p(((2.0 * x) / (1.0 - x)))
function code(x) return Float64(0.5 * log1p(Float64(Float64(2.0 * x) / Float64(1.0 - x)))) end
code[x_] := N[(0.5 * N[Log[1 + N[(N[(2.0 * x), $MachinePrecision] / N[(1.0 - x), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
0.5 \cdot \mathsf{log1p}\left(\frac{2 \cdot x}{1 - x}\right)
(FPCore (x) :precision binary64 (* (copysign 1.0 x) (* 0.5 (log1p (/ (* 2.0 (fabs x)) (- 1.0 (fabs x)))))))
double code(double x) {
return copysign(1.0, x) * (0.5 * log1p(((2.0 * fabs(x)) / (1.0 - fabs(x)))));
}
public static double code(double x) {
return Math.copySign(1.0, x) * (0.5 * Math.log1p(((2.0 * Math.abs(x)) / (1.0 - Math.abs(x)))));
}
def code(x): return math.copysign(1.0, x) * (0.5 * math.log1p(((2.0 * math.fabs(x)) / (1.0 - math.fabs(x)))))
function code(x) return Float64(copysign(1.0, x) * Float64(0.5 * log1p(Float64(Float64(2.0 * abs(x)) / Float64(1.0 - abs(x)))))) end
code[x_] := N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[x]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * N[(0.5 * N[Log[1 + N[(N[(2.0 * N[Abs[x], $MachinePrecision]), $MachinePrecision] / N[(1.0 - N[Abs[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\mathsf{copysign}\left(1, x\right) \cdot \left(0.5 \cdot \mathsf{log1p}\left(\frac{2 \cdot \left|x\right|}{1 - \left|x\right|}\right)\right)
Initial program 100.0%
herbie shell --seed 2025192
(FPCore (x)
:name "Rust f64::atanh"
:precision binary64
(* 0.5 (log1p (/ (* 2.0 x) (- 1.0 x)))))