| 537 | #ifdef KR_headers |
| 538 | double f__cabsf(); |
| 539 | double c_abs(z) complex *z; |
| 540 | #else |
| 541 | double f__cabsf(float, float); |
| 542 | double c_abs(complex *z) |
| 543 | #endif |
| 544 | { |
| 545 | return( f__cabsf( z->r, z->i ) ); |
| 546 | } |
| 547 | |
| 548 | #ifdef KR_headers |
| 549 | double f__cabs(); |
| 550 | double z_abs(z) doublecomplex *z; |
| 551 | #else |
| 552 | double f__cabs(double, double); |
| 553 | double z_abs(doublecomplex *z) |
| 554 | #endif |
| 555 | { |
| 556 | return( f__cabs( z->r, z->i ) ); |
| 557 | } |
| 558 | |
| 559 | |
| 560 | #ifdef KR_headers |
| 561 | extern void sig_die(); |
| 562 | VOID c_div(c, a, b) complex *a, *b, *c; |
| 563 | #else |
| 564 | extern void sig_die(char*, int); |
| 565 | void c_div(complex *c, complex *a, complex *b) |
| 566 | #endif |
| 567 | { |
| 568 | float ratio, den; |
| 569 | float abr, abi; |
| 570 | |
| 571 | if( (abr = b->r) < 0.f) |
| 572 | abr = - abr; |
| 573 | if( (abi = b->i) < 0.f) |
| 574 | abi = - abi; |
| 575 | if( abr <= abi ) |
| 576 | { |
| 577 | /*Let IEEE Infinities handle this ;( */ |
| 578 | /*if(abi == 0) |
| 579 | sig_die("complex division by zero", 1);*/ |
| 580 | ratio = b->r / b->i ; |
| 581 | den = b->i * (1 + ratio*ratio); |
| 582 | c->r = (a->r*ratio + a->i) / den; |
| 583 | c->i = (a->i*ratio - a->r) / den; |
| 584 | } |
| 585 | |
| 586 | else |
| 587 | { |