Skip to content

Commit 7f4fd2d

Browse files
committed
changed erf to _erf, got rid of unnecessary branch
1 parent 6f554ef commit 7f4fd2d

File tree

1 file changed

+6
-19
lines changed

1 file changed

+6
-19
lines changed

src/erf.jl

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ for f in (:erf, :erfc)
2525
end
2626
end
2727

28-
erfc(x::Float64) = ccall((erfc, libopenlibm), Float64, (Float64,), x)
29-
erfc(x::Float32) = ccall((erfcf, libopenlibm), Float32, (Float32,), x)
30-
erfc(x::Float16) = Float16(erfc(Float32(x)))
28+
_erfc(x::Float64) = ccall((_erfc, libopenlibm), Float64, (Float64,), x)
29+
_erfc(x::Float32) = ccall((_erfcf, libopenlibm), Float32, (Float32,), x)
30+
_erfc(x::Float16) = Float16(_erfc(Float32(x)))
3131

3232
for f in (:erfcx, :erfi, :dawson, :faddeeva)
3333
internalf = Symbol(:_, f)
@@ -104,7 +104,7 @@ See also:
104104
# Fast erf implementation using a mix of
105105
# rational and polynomial approximations.
106106
# Highest measured error is 1.01 ULPs at 0x1.39956ac43382fp+0.
107-
function erf(x::Float64)
107+
function _erf(x::Float64)
108108
# Minimax approximation of erf
109109
PA=(0x1.06eba8214db68p-3, -0x1.812746b037948p-2, 0x1.ce2f21a03872p-4,-0x1.b82ce30e6548p-6, 0x1.565bcc360a2f2p-8, -0x1.c02d812bc979ap-11,0x1.f99bddfc1ebe9p-14, -0x1.f42c457cee912p-17, 0x1.b0e414ec20ee9p-20,-0x1.18c47fd143c5ep-23)
110110
# Rational approximation on [0x1p-28, 0.84375]
@@ -142,19 +142,6 @@ function erf(x::Float64)
142142
if (ia < 0x3feb0000)
143143
# a = |x| < 0.84375.
144144

145-
if (ia < 0x3e300000)
146-
# a < 2^(-28).
147-
if (ia < 0x00800000)
148-
# a < 2^(-1015).
149-
y = fma(TwoOverSqrtPiMinusOne, x, x)
150-
151-
## case of underflow TBD
152-
#return check_uflow (y)
153-
return y
154-
end
155-
return x + TwoOverSqrtPiMinusOne * x
156-
end
157-
158145
x2 = x * x
159146

160147
if (ia < 0x3fe00000)
@@ -349,9 +336,9 @@ function erf(x::Float64)
349336

350337
end
351338

352-
erf(x::Float32)=Float32(erf(Float64(x)))
339+
_erf(x::Float32)=Float32(_erf(Float64(x)))
353340

354-
erf(x::Float16)=Float16(erf(Float64(x)))
341+
_erf(x::Float16)=Float16(_erf(Float64(x)))
355342

356343

357344
function erf end

0 commit comments

Comments
 (0)