@@ -378,17 +378,14 @@ end
378
378
379
379
t = GAMMA_ONE_SIXTH (T) * GAMMA_FIVE_SIXTHS (T) / 4
380
380
t2 = 1 / t
381
-
382
381
a = @fastmath inv (4 * xsqrx)
383
382
a2 = 4 * xsqrx
384
383
385
384
s = zero (typeof (x))
386
385
l = @ntuple $ N i -> begin
387
386
s += t
388
-
389
387
t *= - a * (3 * (i - 5 // 6 ) * (i - 1 // 6 ) / i)
390
388
t2 *= - a2 * (i / (3 * (i - 5 // 6 ) * (i - 1 // 6 )))
391
-
392
389
Vec {4, T} ((reim (s * t2)... , reim (t2)... ))
393
390
end
394
391
return levin_transform (l) / (T (π)^ (3 // 2 ) * sqrt (xsqr))
@@ -403,17 +400,14 @@ end
403
400
404
401
t = - GAMMA_ONE_SIXTH (T) * GAMMA_FIVE_SIXTHS (T) / 4
405
402
t2 = 1 / t
406
-
407
403
a = @fastmath inv (4 * xsqrx)
408
404
a2 = 4 * xsqrx
409
405
410
406
s = zero (typeof (x))
411
407
l = @ntuple $ N i -> begin
412
408
s += t
413
-
414
409
t *= - a * (3 * (i - 7 // 6 ) * (i + 1 // 6 ) / i)
415
410
t2 *= - a2 * (i / (3 * (i - 7 // 6 ) * (i + 1 // 6 )))
416
-
417
411
Vec {4, T} ((reim (s * t2)... , reim (t2)... ))
418
412
end
419
413
return levin_transform (l) * sqrt (xsqr) / T (π)^ (3 // 2 )
@@ -424,27 +418,33 @@ end
424
418
@generated function airybi_levin (x:: Complex{T} , :: Val{N} ) where {T <: Union{Float32, Float64} , N}
425
419
:(
426
420
begin
421
+
427
422
xsqr = sqrt (x)
428
- out = zero (typeof (x))
429
- t = GAMMA_ONE_SIXTH (T) * GAMMA_FIVE_SIXTHS (T) / 4
430
- a = T (0.25 ) / (xsqr* x)
423
+ xsqrx = xsqr * x
431
424
432
- l = @ntuple $ N i -> begin
433
- out += t
434
- t *= - 3 * a * (i - 5 // 6 ) * (i - 1 // 6 ) / i
435
- invt = @fastmath inv (t)
436
- Vec {4, T} ((reim (out * invt)... , reim (invt)... ))
437
- end
438
- out = zero (typeof (x))
439
425
t = GAMMA_ONE_SIXTH (T) * GAMMA_FIVE_SIXTHS (T) / 4
440
- l2 = @ntuple $ N i -> begin
441
- out += t
442
- t *= 3 * a * (i - 5 // 6 ) * (i - 1 // 6 ) / i
443
- invt = @fastmath inv (t)
444
- Vec {4, T} ((reim (out * invt)... , reim (invt)... ))
426
+ t2 = 1 / t
427
+ a = inv (4 * xsqrx)
428
+ a2 = 4 * xsqrx
429
+
430
+ s = zero (typeof (x))
431
+ s2 = zero (typeof (x))
432
+ m = 1
433
+ @nexprs $ N i -> begin
434
+ s += t
435
+ s2 += t * m
436
+ t *= - a * (3 * (i - 5 // 6 ) * (i - 1 // 6 ) / i)
437
+ t2 *= - a2 * (i / (3 * (i - 5 // 6 ) * (i - 1 // 6 )))
438
+ l_{i} = Vec {4, T} ((reim (s * t2)... , reim (t2)... ))
439
+ w_{i} = Vec {4, T} ((reim (s2 * t2 * m)... , reim (t2 * m)... ))
440
+ m *= - 1
445
441
end
442
+
443
+ l = @ntuple $ N i -> l_{i}
444
+ w = @ntuple $ N i -> w_{i}
445
+
446
446
e = exp (- 2 / 3 * x * sqrt (x))
447
- return @fastmath (e* im* levin_transform (l) + 2 * levin_transform (l2 )/ e) / (sqrt (T (π)^ 3 ) * sqrt (xsqr))
447
+ return @fastmath (e* im* levin_transform (l) + 2 * levin_transform (w )/ e) / (sqrt (T (π)^ 3 ) * sqrt (xsqr))
448
448
end
449
449
)
450
450
end
@@ -453,26 +453,31 @@ end
453
453
:(
454
454
begin
455
455
xsqr = sqrt (x)
456
- out = zero (typeof (x))
457
- t = GAMMA_ONE_SIXTH (T) * GAMMA_FIVE_SIXTHS (T) / 4
458
- a = T (0.25 ) / (xsqr* x)
456
+ xsqrx = xsqr * x
459
457
460
- l = @ntuple $ N i -> begin
461
- out += t
462
- t *= - 3 * a * (i - 7 // 6 ) * (i + 1 // 6 ) / i
463
- invt = @fastmath inv (t)
464
- Vec {4, T} ((reim (out * invt)... , reim (invt)... ))
465
- end
466
- out = zero (typeof (x))
467
458
t = GAMMA_ONE_SIXTH (T) * GAMMA_FIVE_SIXTHS (T) / 4
468
- l2 = @ntuple $ N i -> begin
469
- out += t
470
- t *= 3 * a * (i - 7 // 6 ) * (i + 1 // 6 ) / i
471
- invt = @fastmath inv (t)
472
- Vec {4, T} ((reim (out * invt)... , reim (invt)... ))
459
+ t2 = 1 / t
460
+ a = inv (4 * xsqrx)
461
+ a2 = 4 * xsqrx
462
+
463
+ s = zero (typeof (x))
464
+ s2 = zero (typeof (x))
465
+ m = 1
466
+ @nexprs $ N i -> begin
467
+ s += t
468
+ s2 += t * m
469
+ t *= - a * (3 * (i - 7 // 6 ) * (i + 1 // 6 ) / i)
470
+ t2 *= - a2 * (i / (3 * (i - 7 // 6 ) * (i + 1 // 6 )))
471
+ l_{i} = Vec {4, T} ((reim (s * t2)... , reim (t2)... ))
472
+ w_{i} = Vec {4, T} ((reim (s2 * t2 * m)... , reim (t2 * m)... ))
473
+ m *= - 1
473
474
end
475
+
476
+ l = @ntuple $ N i -> l_{i}
477
+ w = @ntuple $ N i -> w_{i}
478
+
474
479
e = exp (- 2 / 3 * x * sqrt (x))
475
- return @fastmath - (e* im* levin_transform (l) - 2 * levin_transform (l2 )/ e) * sqrt (xsqr) / (sqrt (T (π)^ 3 ))
480
+ return - (e* im* levin_transform (l) - 2 * levin_transform (w )/ e) * sqrt (xsqr) / (sqrt (T (π)^ 3 ))
476
481
end
477
482
)
478
483
end
0 commit comments