HP42s first major program (Double Integral) Best way to approach?
|
06-20-2020, 04:23 PM
(This post was last modified: 10-23-2020 09:01 PM by Albert Chan.)
Post: #68
|
|||
|
|||
RE: HP42s first major program (Double Integral) Best way to approach?
(06-13-2020 10:16 PM)Albert Chan Wrote: Inspired by Werner's AGM code thread, I fixed my AGM2 convergence issue. To improve agm2 accuracy, I redefined agm2 returns: x, y = agm2(a, b) → x = converged GM of agm(a, b) → y = -Σ(2k (½gapk)² , k = 1 .. n), n = number of iterations to converge GM With this new setup, ellipse_perimeter(a,b) = 4 a E(1-(b/a)²) = pi (y + b² + a²)/x Example: for ellipse perimeter, a=50, b=10 50 Enter 10 XEQ "AGM" [X<>Y] 10 [X↑2] + 50 [X↑2] + [X<>Y] ÷ ; ellipse "diameter" ≈ 66.8770488614 PI × ; ellipse perimeter ≈ 210.100445397 For E(m), K(m): x, y = agm2(1, sqrt(1-m)) → K = pi / (2*x) → E = K * (y + (1-m) + 1²) / 2 = K + K*(y-m)/2 Instead of returning (E, K), it is better to return (K, E-K), keeping the accurate difference. (for 0 < m < 1, y is negative, E-K = K*(y-m)/2 avoided subtraction cancellation errors) Again, for ellipse_perimeter, a=50, b=10, e² = 1-(b/a)² = 0.96 0.96 XEQ "K" + 200 × ; ellipse perimeter ≈ 210.100445397 Below is updated EK based HV, and K/AGM code Code: 00 { 65-Byte Prgm } Code: 00 { 92-Byte Prgm } (06-08-2020 12:11 AM)Albert Chan Wrote: HV(1,1000) = 785.3980652226656130844841050849260, error = -2 ULP This updated version matched accuracy of my EKmc based HV. With EK based HV(1,1000), I get: 785.3980652226656130844841050849257 |
|||
« Next Oldest | Next Newest »
|
User(s) browsing this thread: 1 Guest(s)