
(FPCore (x) :precision binary64 (+ (sqrt x) (sqrt (- 1.0 x))))
double code(double x) {
return sqrt(x) + sqrt((1.0 - x));
}
real(8) function code(x)
real(8), intent (in) :: x
code = sqrt(x) + sqrt((1.0d0 - x))
end function
public static double code(double x) {
return Math.sqrt(x) + Math.sqrt((1.0 - x));
}
def code(x): return math.sqrt(x) + math.sqrt((1.0 - x))
function code(x) return Float64(sqrt(x) + sqrt(Float64(1.0 - x))) end
function tmp = code(x) tmp = sqrt(x) + sqrt((1.0 - x)); end
code[x_] := N[(N[Sqrt[x], $MachinePrecision] + N[Sqrt[N[(1.0 - x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\sqrt{x} + \sqrt{1 - x}
Herbie found 2 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x) :precision binary64 (+ (sqrt x) (sqrt (- 1.0 x))))
double code(double x) {
return sqrt(x) + sqrt((1.0 - x));
}
real(8) function code(x)
real(8), intent (in) :: x
code = sqrt(x) + sqrt((1.0d0 - x))
end function
public static double code(double x) {
return Math.sqrt(x) + Math.sqrt((1.0 - x));
}
def code(x): return math.sqrt(x) + math.sqrt((1.0 - x))
function code(x) return Float64(sqrt(x) + sqrt(Float64(1.0 - x))) end
function tmp = code(x) tmp = sqrt(x) + sqrt((1.0 - x)); end
code[x_] := N[(N[Sqrt[x], $MachinePrecision] + N[Sqrt[N[(1.0 - x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\sqrt{x} + \sqrt{1 - x}
(FPCore (x) :precision binary64 (+ 1.0 (sqrt x)))
double code(double x) {
return 1.0 + sqrt(x);
}
real(8) function code(x)
real(8), intent (in) :: x
code = 1.0d0 + sqrt(x)
end function
public static double code(double x) {
return 1.0 + Math.sqrt(x);
}
def code(x): return 1.0 + math.sqrt(x)
function code(x) return Float64(1.0 + sqrt(x)) end
function tmp = code(x) tmp = 1.0 + sqrt(x); end
code[x_] := N[(1.0 + N[Sqrt[x], $MachinePrecision]), $MachinePrecision]
1 + \sqrt{x}
Initial program 100.0%
Taylor expanded in x around 0
lower-+.f64N/A
lower-sqrt.f6498.0%
Applied rewrites98.0%
herbie shell --seed 1
(FPCore (x)
:name "sqrt(x) + sqrt(1-x)"
:precision binary64
:pre (and (<= -1000000000.0 x) (<= x 1000000000.0))
(+ (sqrt x) (sqrt (- 1.0 x))))