
(FPCore (x) :precision binary64 (- (sqrt (+ 1.0 x)) (sqrt (- 1.0 x))))
(FPCore (x) :precision binary64 x)
double code(double x) {
return sqrt((1.0 + x)) - sqrt((1.0 - x));
}
double code(double x) {
return x;
}
real(8) function code(x)
real(8), intent (in) :: x
code = sqrt((1.0d0 + x)) - sqrt((1.0d0 - x))
end function
real(8) function code(x)
real(8), intent (in) :: x
code = x
end function
public static double code(double x) {
return Math.sqrt((1.0 + x)) - Math.sqrt((1.0 - x));
}
public static double code(double x) {
return x;
}
def code(x): return math.sqrt((1.0 + x)) - math.sqrt((1.0 - x))
def code(x): return x
function code(x) return Float64(sqrt(Float64(1.0 + x)) - sqrt(Float64(1.0 - x))) end
function code(x) return x end
function tmp = code(x) tmp = sqrt((1.0 + x)) - sqrt((1.0 - x)); end
function tmp = code(x) tmp = x; end
code[x_] := N[(N[Sqrt[N[(1.0 + x), $MachinePrecision]], $MachinePrecision] - N[Sqrt[N[(1.0 - x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
code[x_] := x
\sqrt{1 + x} - \sqrt{1 - x}
x
Herbie found 1 alternatives:
| Alternative | Accuracy | Speedup |
|---|
Results
| Original | 6.1% |
|---|---|
| Target | 100.0% |
| Herbie | 100.0% |
Initial program 5.5%
Simplified5.5%
[Start]5.5% | \[ \sqrt{1 + x} - \sqrt{1 - x}
\] |
|---|---|
+-commutative [=>]5.5% | \[ \sqrt{\color{blue}{x + 1}} - \sqrt{1 - x}
\] |
metadata-eval [<=]5.5% | \[ \sqrt{x + \color{blue}{\left(--1\right)}} - \sqrt{1 - x}
\] |
sub-neg [<=]5.5% | \[ \sqrt{\color{blue}{x - -1}} - \sqrt{1 - x}
\] |
Taylor expanded in x around 0 100.0%
Final simplification100.0%
herbie shell --seed 2023263
(FPCore (x)
:name "bug333 (missed optimization)"
:precision binary64
:pre (and (<= -1.0 x) (<= x 1.0))
:herbie-target
(/ (* 2.0 x) (+ (sqrt (+ 1.0 x)) (sqrt (- 1.0 x))))
(- (sqrt (+ 1.0 x)) (sqrt (- 1.0 x))))