| 397 | let dy = 0; |
| 398 | let dxy = 0; |
| 399 | let dx2 = 0; |
| 400 | let dy2 = 0; |
| 401 | for (let i = 0; i < n; i++) { |
| 402 | const a = (xs[i] - mx) / sx; |
| 403 | const b = (ys[i] - my) / sy; |
| 404 | dx += a; |
| 405 | dy += b; |
| 406 | dxy += a * b; |
| 407 | dx2 += a * a; |
| 408 | dy2 += b * b; |
| 409 | } |
| 410 | return { dx, dy, dxy, dx2, dy2, ex, ey }; |
| 411 | } |
| 412 | |
| 413 | function bigPairedCenteredSums( |
| 414 | xs: readonly BigDecimal[], |
| 415 | ys: readonly BigDecimal[] |
| 416 | ): { |
| 417 | dx: BigDecimal; |
| 418 | dy: BigDecimal; |
| 419 | dxy: BigDecimal; |
| 420 | dx2: BigDecimal; |
| 421 | dy2: BigDecimal; |
| 422 | } { |
| 423 | const n = xs.length; |
| 424 | let mx = BigDecimal.ZERO; |
| 425 | let my = BigDecimal.ZERO; |
| 426 | for (let i = 0; i < n; i++) { |
| 427 | mx = mx.add(xs[i]); |
| 428 | my = my.add(ys[i]); |
| 429 | } |