| 599 | } |
| 600 | |
| 601 | bool realSqrt(const number n, const number tolerance, number &root) |
| 602 | { |
| 603 | if (!nGreaterZero(n)) return false; |
| 604 | if (nIsZero(n)) return nInit(0); |
| 605 | |
| 606 | number oneHalf = complexNumber(0.5, 0.0); |
| 607 | number nHalf = nMult(n, oneHalf); |
| 608 | root = nCopy(n); |
| 609 | number nOld = complexNumber(10.0, 0.0); |
| 610 | number nDiff = nCopy(nOld); |
| 611 | |
| 612 | while (nGreater(nDiff, tolerance)) |
| 613 | { |
| 614 | nDelete(&nOld); |
| 615 | nOld = root; |
| 616 | root = nAdd(nMult(oneHalf, nOld), nDiv(nHalf, nOld)); |
| 617 | nDelete(&nDiff); |
| 618 | nDiff = nSub(nOld, root); |
| 619 | if (!nGreaterZero(nDiff)) nDiff = nInpNeg(nDiff); |
| 620 | } |
| 621 | |
| 622 | nDelete(&nOld); nDelete(&nDiff); nDelete(&oneHalf); nDelete(&nHalf); |
| 623 | return true; |
| 624 | } |
| 625 | |
| 626 | int quadraticSolve(const poly p, number &s1, number &s2, |
| 627 | const number tolerance) |
no test coverage detected