Skip to content

Commit c1679f4

Browse files
committed
Address comment
1 parent d5a2994 commit c1679f4

File tree

2 files changed

+38
-72
lines changed

2 files changed

+38
-72
lines changed

src/bessel.jl

Lines changed: 37 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,13 @@ end
88

99
## Airy functions
1010
function _airy(z::Complex128, id::Int32, kode::Int32)
11-
rz1, rz2 = Ref(real(z)), Ref(imag(z))
12-
rid = Ref(id)
13-
rkode = Ref(kode)
1411
ai1, ai2 = Ref{Float64}(), Ref{Float64}()
1512
ae1, ae2 = Ref{Int32}(), Ref{Int32}()
1613

1714
ccall((:zairy_,openspecfun), Void,
18-
(Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32},
15+
(Ref{Float64}, Ref{Float64}, Ref{Int32}, Ref{Int32},
1916
Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32}),
20-
rz1, rz2, rid, rkode,
17+
real(z), imag(z), id, kode,
2118
ai1, ai2, ae1, ae2)
2219

2320
if ae2[] == 0 || ae2[] == 3 # ignore underflow and less than half machine accuracy loss
@@ -28,16 +25,13 @@ function _airy(z::Complex128, id::Int32, kode::Int32)
2825
end
2926

3027
function _biry(z::Complex128, id::Int32, kode::Int32)
31-
rz1, rz2 = Ref(real(z)), Ref(imag(z))
32-
rid = Ref(id)
33-
rkode = Ref(kode)
3428
ai1, ai2 = Ref{Float64}(), Ref{Float64}()
3529
ae1 = Ref{Int32}()
3630

3731
ccall((:zbiry_,openspecfun), Void,
38-
(Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32},
32+
(Ref{Float64}, Ref{Float64}, Ref{Int32}, Ref{Int32},
3933
Ptr{Float64}, Ptr{Float64}, Ptr{Int32}),
40-
rz1, rz2, rid, rkode,
34+
real(z), imag(z), id, kode,
4135
ai1, ai2, ae1)
4236

4337
if ae1[] == 0 || ae1[] == 3 # ignore less than half machine accuracy loss
@@ -129,10 +123,9 @@ for afn in (:airyai, :airyaiprime, :airybi, :airybiprime,
129123
end
130124

131125
function airyai(x::BigFloat)
132-
rx = Ref(x)
133-
rz = Ref(BigFloat())
134-
ccall((:mpfr_ai, :libmpfr), Int32, (Ptr{BigFloat}, Ptr{BigFloat}, Int32), rz, rx, ROUNDING_MODE[])
135-
return rz[]
126+
z = BigFloat()
127+
ccall((:mpfr_ai, :libmpfr), Int32, (Ref{BigFloat}, Ref{BigFloat}, Int32), z, x, ROUNDING_MODE[])
128+
return z
136129
end
137130

138131
## Bessel functions
@@ -161,19 +154,14 @@ end
161154

162155

163156
function _besselh(nu::Float64, k::Int32, z::Complex128, kode::Int32)
164-
rnu = Ref(nu)
165-
rz1, rz2 = Ref(real(z)), Ref(imag(z))
166-
rkode = Ref(kode)
167-
rk = Ref(k)
168-
r1 = Ref{Int32}(1)
169157
ai1, ai2 = Ref{Float64}(), Ref{Float64}()
170158
ae1, ae2 = Ref{Int32}(), Ref{Int32}()
171159

172160
ccall((:zbesh_,openspecfun), Void,
173-
(Ptr{Float64}, Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32},
174-
Ptr{Int32}, Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32}),
175-
rz1, rz2, rnu, rkode, rk, r1,
176-
ai1, ai2, ae1, ae2)
161+
(Ref{Float64}, Ref{Float64}, Ref{Float64}, Ref{Int32}, Ref{Int32}, Ref{Int},
162+
Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32}),
163+
real(z), imag(z), nu, kode, k, 1,
164+
ai1, ai2, ae1, ae2)
177165

178166
if ae2[] == 0 || ae2[] == 3
179167
return complex(ai1[],ai2[])
@@ -183,17 +171,13 @@ function _besselh(nu::Float64, k::Int32, z::Complex128, kode::Int32)
183171
end
184172

185173
function _besseli(nu::Float64, z::Complex128, kode::Int32)
186-
rnu = Ref(nu)
187-
rz1, rz2 = Ref(real(z)), Ref(imag(z))
188-
rkode = Ref(kode)
189-
r1 = Ref{Int32}(1)
190174
ai1, ai2 = Ref{Float64}(), Ref{Float64}()
191175
ae1, ae2 = Ref{Int32}(), Ref{Int32}()
192176

193177
ccall((:zbesi_,openspecfun), Void,
194-
(Ptr{Float64}, Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32},
178+
(Ref{Float64}, Ref{Float64}, Ref{Float64}, Ref{Int32}, Ref{Int32},
195179
Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32}),
196-
rz1, rz2, rnu, rkode, r1,
180+
real(z), imag(z), nu, kode, 1,
197181
ai1, ai2, ae1, ae2)
198182

199183
if ae2[] == 0 || ae2[] == 3
@@ -204,17 +188,13 @@ function _besseli(nu::Float64, z::Complex128, kode::Int32)
204188
end
205189

206190
function _besselj(nu::Float64, z::Complex128, kode::Int32)
207-
rnu = Ref(nu)
208-
rz1, rz2 = Ref(real(z)), Ref(imag(z))
209-
rkode = Ref(kode)
210-
r1 = Ref{Int32}(1)
211191
ai1, ai2 = Ref{Float64}(), Ref{Float64}()
212192
ae1, ae2 = Ref{Int32}(), Ref{Int32}()
213193

214194
ccall((:zbesj_,openspecfun), Void,
215-
(Ptr{Float64}, Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32},
195+
(Ref{Float64}, Ref{Float64}, Ref{Float64}, Ref{Int32}, Ref{Int32},
216196
Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32}),
217-
rz1, rz2, rnu, rkode, r1,
197+
real(z), imag(z), nu, kode, 1,
218198
ai1, ai2, ae1, ae2)
219199

220200
if ae2[] == 0 || ae2[] == 3
@@ -225,17 +205,13 @@ function _besselj(nu::Float64, z::Complex128, kode::Int32)
225205
end
226206

227207
function _besselk(nu::Float64, z::Complex128, kode::Int32)
228-
rnu = Ref(nu)
229-
rz1, rz2 = Ref(real(z)), Ref(imag(z))
230-
rkode = Ref(kode)
231-
r1 = Ref{Int32}(1)
232208
ai1, ai2 = Ref{Float64}(), Ref{Float64}()
233209
ae1, ae2 = Ref{Int32}(), Ref{Int32}()
234210

235211
ccall((:zbesk_,openspecfun), Void,
236-
(Ptr{Float64}, Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32},
212+
(Ref{Float64}, Ref{Float64}, Ref{Float64}, Ref{Int32}, Ref{Int32},
237213
Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32}),
238-
rz1, rz2, rnu, rkode, r1,
214+
real(z), imag(z), nu, kode, 1,
239215
ai1, ai2, ae1, ae2)
240216

241217
if ae2[] == 0 || ae2[] == 3
@@ -246,18 +222,14 @@ function _besselk(nu::Float64, z::Complex128, kode::Int32)
246222
end
247223

248224
function _bessely(nu::Float64, z::Complex128, kode::Int32)
249-
rnu = Ref(nu)
250-
rz1, rz2 = Ref(real(z)), Ref(imag(z))
251-
rkode = Ref(kode)
252-
r1 = Ref{Int32}(1)
253225
ai1, ai2 = Ref{Float64}(), Ref{Float64}()
254226
ae1, ae2 = Ref{Int32}(), Ref{Int32}()
255227
wrk1, wrk2 = Ref{Float64}(), Ref{Float64}()
256228

257229
ccall((:zbesy_,openspecfun), Void,
258-
(Ptr{Float64}, Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Int32},
230+
(Ref{Float64}, Ref{Float64}, Ref{Float64}, Ref{Int32}, Ref{Int32},
259231
Ptr{Float64}, Ptr{Float64}, Ptr{Int32}, Ptr{Float64}, Ptr{Float64}, Ptr{Int32}),
260-
rz1, rz2, rnu, rkode, r1,
232+
real(z), imag(z), nu, kode, 1,
261233
ai1, ai2, ae1, wrk1, wrk2, ae2)
262234

263235
if ae2[] == 0 || ae2[] == 3
@@ -536,10 +508,9 @@ end
536508
Bessel function of the first kind of order 0, ``J_0(x)``.
537509
"""
538510
function besselj0(x::BigFloat)
539-
rx = Ref(x)
540-
rz = Ref(BigFloat())
541-
ccall((:mpfr_j0, :libmpfr), Int32, (Ptr{BigFloat}, Ptr{BigFloat}, Int32), rz, x, ROUNDING_MODE[])
542-
return rz[]
511+
z = BigFloat()
512+
ccall((:mpfr_j0, :libmpfr), Int32, (Ref{BigFloat}, Ref{BigFloat}, Int32), z, x, ROUNDING_MODE[])
513+
return z
543514
end
544515

545516
"""
@@ -548,17 +519,15 @@ end
548519
Bessel function of the first kind of order 1, ``J_1(x)``.
549520
"""
550521
function besselj1(x::BigFloat)
551-
rx = Ref(x)
552-
rz = Ref(BigFloat())
553-
ccall((:mpfr_j1, :libmpfr), Int32, (Ptr{BigFloat}, Ptr{BigFloat}, Int32), rz, rx, ROUNDING_MODE[])
554-
return rz[]
522+
z = BigFloat()
523+
ccall((:mpfr_j1, :libmpfr), Int32, (Ref{BigFloat}, Ref{BigFloat}, Int32), z, x, ROUNDING_MODE[])
524+
return z
555525
end
556526

557527
function besselj(n::Integer, x::BigFloat)
558-
rx = Ref(x)
559-
rz = Ref(BigFloat())
560-
ccall((:mpfr_jn, :libmpfr), Int32, (Ptr{BigFloat}, Clong, Ptr{BigFloat}, Int32), rz, n, rx, ROUNDING_MODE[])
561-
return rz[]
528+
z = BigFloat()
529+
ccall((:mpfr_jn, :libmpfr), Int32, (Ref{BigFloat}, Clong, Ref{BigFloat}, Int32), z, n, x, ROUNDING_MODE[])
530+
return z
562531
end
563532

564533
"""
@@ -570,10 +539,9 @@ function bessely0(x::BigFloat)
570539
if x < 0
571540
throw(DomainError(x, "`x` must be nonnegative."))
572541
end
573-
rx = Ref(x)
574-
rz = Ref(BigFloat())
575-
ccall((:mpfr_y0, :libmpfr), Int32, (Ptr{BigFloat}, Ptr{BigFloat}, Int32), rz, rx, ROUNDING_MODE[])
576-
return rz[]
542+
z = BigFloat()
543+
ccall((:mpfr_y0, :libmpfr), Int32, (Ref{BigFloat}, Ref{BigFloat}, Int32), z, x, ROUNDING_MODE[])
544+
return z
577545
end
578546

579547
"""
@@ -585,20 +553,18 @@ function bessely1(x::BigFloat)
585553
if x < 0
586554
throw(DomainError(x, "`x` must be nonnegative."))
587555
end
588-
rx = Ref(x)
589-
rz = Ref(BigFloat())
590-
ccall((:mpfr_y1, :libmpfr), Int32, (Ptr{BigFloat}, Ptr{BigFloat}, Int32), rz, rx, ROUNDING_MODE[])
591-
return rz[]
556+
z = BigFloat()
557+
ccall((:mpfr_y1, :libmpfr), Int32, (Ref{BigFloat}, Ref{BigFloat}, Int32), z, x, ROUNDING_MODE[])
558+
return z
592559
end
593560

594561
function bessely(n::Integer, x::BigFloat)
595562
if x < 0
596563
throw(DomainError(x, "`x` must be nonnegative."))
597564
end
598-
rx = Ref(x)
599-
rz = Ref(BigFloat())
600-
ccall((:mpfr_yn, :libmpfr), Int32, (Ptr{BigFloat}, Clong, Ptr{BigFloat}, Int32), rz, n, rx, ROUNDING_MODE[])
601-
return rz[]
565+
z = BigFloat()
566+
ccall((:mpfr_yn, :libmpfr), Int32, (Ref{BigFloat}, Clong, Ref{BigFloat}, Int32), z, n, x, ROUNDING_MODE[])
567+
return z
602568
end
603569

604570
"""

src/erf.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ for f in (:erf, :erfc)
1212
($f)(a::Complex32) = Complex32($f(Complex64(a)))
1313
function ($f)(x::BigFloat)
1414
z = BigFloat()
15-
ccall(($(string(:mpfr_,f)), :libmpfr), Int32, (Ptr{BigFloat}, Ptr{BigFloat}, Int32), &z, &x, ROUNDING_MODE[])
15+
ccall(($(string(:mpfr_,f)), :libmpfr), Int32, (Ref{BigFloat}, Ref{BigFloat}, Int32), z, x, ROUNDING_MODE[])
1616
return z
1717
end
1818
($f)(x::AbstractFloat) = error("not implemented for ", typeof(x))

0 commit comments

Comments
 (0)