(ce: ComputeEngine, x: BigNum)
| 2703 | * Reference: NIST DLMF 9.2, 9.4, 9.7 |
| 2704 | */ |
| 2705 | export function airyBiPrime(x: number): number { |
| 2706 | if (!isFinite(x)) return NaN; |
| 2707 | |
| 2708 | if (x > 9) { |
| 2709 | // Bi′(x) ~ x^{1/4} e^{ξ}/√π Σ v_k/ξ^k (DLMF 9.7.8) |
| 2710 | const xi = airyXi(x); |
| 2711 | const xiHi = xi[0]; |
| 2712 | if (!Number.isFinite(xiHi)) return Infinity; // e^{ξ} overflows first |
| 2713 | let sum = 1; |
| 2714 | let t = 1; // u_k/ξ^k |
| 2715 | let prevAbs = Infinity; |
| 2716 | for (let k = 1; k <= 60; k++) { |
| 2717 | t *= airyURatio(k) / xiHi; |
| 2718 | const v = (t * (6 * k + 1)) / (1 - 6 * k); // v_k/ξ^k |
| 2719 | const av = Math.abs(v); |
| 2720 | if (av >= prevAbs) break; // divergent tail: stop at smallest term |
| 2721 | sum += v; |
| 2722 | prevAbs = av; |
| 2723 | if (av < 1e-18 * Math.abs(sum)) break; |
| 2724 | } |
no test coverage detected