| 596 | #ifdef KR_headers |
| 597 | extern void sig_die(); |
| 598 | VOID z_div(c, a, b) doublecomplex *a, *b, *c; |
| 599 | #else |
| 600 | extern void sig_die(char*, int); |
| 601 | void z_div(doublecomplex *c, doublecomplex *a, doublecomplex *b) |
| 602 | #endif |
| 603 | { |
| 604 | double ratio, den; |
| 605 | double abr, abi; |
| 606 | |
| 607 | if( (abr = b->r) < 0.) |
| 608 | abr = - abr; |
| 609 | if( (abi = b->i) < 0.) |
| 610 | abi = - abi; |
| 611 | if( abr <= abi ) |
| 612 | { |
| 613 | /*Let IEEE Infinities handle this ;( */ |
| 614 | /*if(abi == 0) |
| 615 | sig_die("complex division by zero", 1);*/ |
| 616 | ratio = b->r / b->i ; |
| 617 | den = b->i * (1 + ratio*ratio); |
| 618 | c->r = (a->r*ratio + a->i) / den; |
| 619 | c->i = (a->i*ratio - a->r) / den; |
| 620 | } |
| 621 | |
| 622 | else |
| 623 | { |