number 0.9.7 → 0.9.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
File without changes
@@ -657,7 +657,7 @@ int complex_contain_zero_p (Complex* complex)
657
657
 
658
658
  int complex_intersect_p (Complex* a, Complex* b)
659
659
  {
660
- return (complex_re_intersect_p(a, b) && complex_im_intersect_p(a, b)) || complex_contain_ll_p(a, b) || complex_contain_lu_p(a, b) || complex_contain_ul_p(a, b) || complex_contain_uu_p(a, b) || (complex_re_enclose_p(a, b) && complex_im_enclose_p(b, a) || (complex_im_enclose_p(a, b) && complex_re_enclose_p(b, a)));
660
+ return ( complex_re_intersect_p(a, b) && complex_im_intersect_p(a, b)) || complex_contain_ll_p(a, b) || complex_contain_lu_p(a, b) || complex_contain_ul_p(a, b) || complex_contain_uu_p(a, b) || ((complex_re_enclose_p(a, b) && complex_im_enclose_p(b, a)) || (complex_im_enclose_p(a, b) && complex_re_enclose_p(b, a)));
661
661
  }
662
662
 
663
663
  int complex_disjoint_p (Complex* a, Complex* b)
@@ -111,7 +111,6 @@ void mpc_set_r_r (mpc_t num, Real* re, Real* im)
111
111
  */
112
112
  void mpfr_set_r (mpfr_t num, Real* real)
113
113
  {
114
- char sign;
115
114
  char buf[10000];
116
115
  char real_buf[10000];
117
116
 
@@ -155,7 +154,7 @@ void complex_free (Complex* complex)
155
154
  */
156
155
  long complex_strlen (Complex* complex)
157
156
  {
158
- return interval_strlen(complex->re) + interval_strlen(complex->im) + 10;
157
+ return (interval_strlen(complex->re) + interval_strlen(complex->im) + 10);
159
158
  }
160
159
 
161
160
  /*
@@ -189,7 +188,7 @@ void complex_print (char* buf, Complex* complex)
189
188
  void complex_print_int (char* buf, Complex* complex)
190
189
  {
191
190
  Real* rounded;
192
- rounded = (Real*)real_round_origin(complex->re->n);
191
+ rounded = real_round_origin(complex->re->n);
193
192
 
194
193
  if (!REAL(rounded))
195
194
  {
@@ -238,7 +237,7 @@ void complex_print_decimal (char* buf, Complex* complex)
238
237
  Complex* complex_new (Interval* re, Interval* im)
239
238
  {
240
239
  Complex* complex;
241
- complex = (Complex*)malloc(sizeof(Complex));
240
+ complex = malloc(sizeof(Complex));
242
241
 
243
242
  if (complex == NULL)
244
243
  {
@@ -246,8 +245,8 @@ Complex* complex_new (Interval* re, Interval* im)
246
245
  }
247
246
 
248
247
  memset(complex, 0, sizeof(Complex));
249
- complex->re = (Interval*)re;
250
- complex->im = (Interval*)im;
248
+ complex->re = re;
249
+ complex->im = im;
251
250
 
252
251
  return complex;
253
252
  }
@@ -259,7 +258,13 @@ Complex* complex_new (Interval* re, Interval* im)
259
258
  */
260
259
  Complex* complex_from_real (Real* real)
261
260
  {
262
- return complex_new((Interval*)interval_from_real(real), (Interval*)interval_zero());
261
+ Interval* re;
262
+ Interval* im;
263
+
264
+ re = interval_from_real(real);
265
+ im = interval_zero();
266
+
267
+ return complex_new(re, im);
263
268
  }
264
269
 
265
270
  /*
@@ -271,8 +276,8 @@ Complex* complex_from_int_str (char* buf)
271
276
  Real* real;
272
277
  Complex* result;
273
278
 
274
- real = (Real*)real_from_str(buf, strlen(buf) - (*buf == '-'));
275
- result = (Complex*)complex_from_real(real);
279
+ real = real_from_str(buf, strlen(buf) - (*buf == '-'));
280
+ result = complex_from_real(real);
276
281
 
277
282
  real_free(real);
278
283
 
@@ -290,8 +295,8 @@ Complex* complex_from_float_str (char* buf)
290
295
 
291
296
  mpfr_set_str(tmp_complex_from_float_str, buf, 10, MPFR_RNDN);
292
297
 
293
- real = (Real*)real_from_mpfr(tmp_complex_from_float_str, ROUND_NEAREST);
294
- result = (Complex*)complex_from_real(real);
298
+ real = real_from_mpfr(tmp_complex_from_float_str, ROUND_NEAREST);
299
+ result = complex_from_real(real);
295
300
 
296
301
  real_free(real);
297
302
 
@@ -303,7 +308,7 @@ Complex* complex_from_float_str (char* buf)
303
308
  */
304
309
  Complex* complex_nan ()
305
310
  {
306
- return complex_new((Interval*)interval_nan(), (Interval*)interval_zero());
311
+ return complex_new(interval_nan(), interval_zero());
307
312
  }
308
313
 
309
314
  /*
@@ -311,7 +316,7 @@ Complex* complex_nan ()
311
316
  */
312
317
  Complex* complex_pos_inf ()
313
318
  {
314
- return complex_new((Interval*)interval_pos_inf(), (Interval*)interval_zero());
319
+ return complex_new(interval_pos_inf(), interval_zero());
315
320
  }
316
321
 
317
322
  /*
@@ -319,7 +324,7 @@ Complex* complex_pos_inf ()
319
324
  */
320
325
  Complex* complex_neg_inf ()
321
326
  {
322
- return complex_new((Interval*)interval_neg_inf(), (Interval*)interval_zero());
327
+ return complex_new(interval_neg_inf(), interval_zero());
323
328
  }
324
329
 
325
330
  /*
@@ -327,7 +332,7 @@ Complex* complex_neg_inf ()
327
332
  */
328
333
  Complex* complex_zero ()
329
334
  {
330
- return complex_new((Interval*)interval_zero(), (Interval*)interval_zero());
335
+ return complex_new(interval_zero(), interval_zero());
331
336
  }
332
337
 
333
338
  /*
@@ -335,7 +340,7 @@ Complex* complex_zero ()
335
340
  */
336
341
  Complex* complex_one ()
337
342
  {
338
- return complex_new((Interval*)interval_one(), (Interval*)interval_zero());
343
+ return complex_new(interval_one(), interval_zero());
339
344
  }
340
345
 
341
346
  /*
@@ -344,7 +349,7 @@ Complex* complex_one ()
344
349
  */
345
350
  Complex* complex_pi ()
346
351
  {
347
- return complex_new((Interval*)interval_pi(), (Interval*)interval_zero());
352
+ return complex_new(interval_pi(), interval_zero());
348
353
  }
349
354
 
350
355
  /*
@@ -353,7 +358,7 @@ Complex* complex_pi ()
353
358
  */
354
359
  Complex* complex_e ()
355
360
  {
356
- return complex_new((Interval*)interval_e(), (Interval*)interval_zero());
361
+ return complex_new(interval_e(), interval_zero());
357
362
  }
358
363
 
359
364
  /*
@@ -361,7 +366,7 @@ Complex* complex_e ()
361
366
  */
362
367
  Complex* complex_i ()
363
368
  {
364
- return complex_new((Interval*)interval_zero(), (Interval*)interval_one());
369
+ return complex_new(interval_zero(), interval_one());
365
370
  }
366
371
 
367
372
  /*
@@ -370,7 +375,7 @@ Complex* complex_i ()
370
375
  */
371
376
  Complex* complex_dup (Complex* complex)
372
377
  {
373
- return complex_new((Interval*)interval_dup(complex->re), (Interval*)interval_dup(complex->im));
378
+ return complex_new(interval_dup(complex->re), interval_dup(complex->im));
374
379
  }
375
380
 
376
381
  /*
@@ -381,8 +386,8 @@ Complex* complex_add (Complex* a, Complex* b)
381
386
  Interval* re;
382
387
  Interval* im;
383
388
 
384
- re = (Interval*)interval_add(a->re, b->re);
385
- im = (Interval*)interval_add(a->im, b->im);
389
+ re = interval_add(a->re, b->re);
390
+ im = interval_add(a->im, b->im);
386
391
 
387
392
  return complex_new(re, im);
388
393
  }
@@ -395,8 +400,8 @@ Complex* complex_subtract (Complex* a, Complex* b)
395
400
  Interval* re;
396
401
  Interval* im;
397
402
 
398
- re = (Interval*)interval_subtract(a->re, b->re);
399
- im = (Interval*)interval_subtract(a->im, b->im);
403
+ re = interval_subtract(a->re, b->re);
404
+ im = interval_subtract(a->im, b->im);
400
405
 
401
406
  return complex_new(re, im);
402
407
  }
@@ -413,20 +418,20 @@ Complex* complex_multiply (Complex* a, Complex* b)
413
418
  Interval* re;
414
419
  Interval* im;
415
420
 
416
- re_re = (Interval*)interval_multiply(a->re, b->re);
417
- re_im = (Interval*)interval_multiply(a->re, b->im);
418
- im_re = (Interval*)interval_multiply(a->im, b->re);
419
- im_im = (Interval*)interval_multiply(a->im, b->im);
421
+ re_re = interval_multiply(a->re, b->re);
422
+ re_im = interval_multiply(a->re, b->im);
423
+ im_re = interval_multiply(a->im, b->re);
424
+ im_im = interval_multiply(a->im, b->im);
420
425
 
421
- re = (Interval*)interval_subtract(re_re, im_im);
422
- im = (Interval*)interval_add(re_im, im_re);
426
+ re = interval_subtract(re_re, im_im);
427
+ im = interval_add(re_im, im_re);
423
428
 
424
429
  interval_free(re_re);
425
430
  interval_free(re_im);
426
431
  interval_free(im_re);
427
432
  interval_free(im_im);
428
433
 
429
- return (Complex*)complex_new(re, im);
434
+ return complex_new(re, im);
430
435
  }
431
436
 
432
437
  /*
@@ -446,9 +451,9 @@ Complex* complex_divide (Complex* a, Complex* b)
446
451
  Interval* re;
447
452
  Interval* im;
448
453
 
449
- denominator_re = (Interval*)interval_multiply(b->re, b->re);
450
- denominator_im = (Interval*)interval_multiply(b->im, b->im);
451
- denominator = (Interval*)interval_add(denominator_re, denominator_im);
454
+ denominator_re = interval_multiply(b->re, b->re);
455
+ denominator_im = interval_multiply(b->im, b->im);
456
+ denominator = interval_add(denominator_re, denominator_im);
452
457
 
453
458
  if (real_zero_p(denominator->l) || real_zero_p(denominator->u) || interval_span_zero_p(denominator))
454
459
  {
@@ -466,21 +471,21 @@ Complex* complex_divide (Complex* a, Complex* b)
466
471
  mpc_real(tmp_divide_re, tmp_divide_quotient, MPFR_RNDN);
467
472
  mpc_imag(tmp_divide_im, tmp_divide_quotient, MPFR_RNDN);
468
473
 
469
- re = (Interval*)interval_new((Real*)real_neg_inf(), true, (Real*)real_from_mpfr(tmp_divide_re, ROUND_NEAREST), true, (Real*)real_pos_inf());
470
- im = (Interval*)interval_new((Real*)real_neg_inf(), true, (Real*)real_from_mpfr(tmp_divide_im, ROUND_NEAREST), true, (Real*)real_pos_inf());
474
+ re = interval_new(real_neg_inf(), true, real_from_mpfr(tmp_divide_re, ROUND_NEAREST), true, real_pos_inf());
475
+ im = interval_new(real_neg_inf(), true, real_from_mpfr(tmp_divide_im, ROUND_NEAREST), true, real_pos_inf());
471
476
  }
472
477
  else
473
478
  {
474
- re_re = (Interval*)interval_multiply(a->re, b->re);
475
- re_im = (Interval*)interval_multiply(a->re, b->im);
476
- im_re = (Interval*)interval_multiply(a->im, b->re);
477
- im_im = (Interval*)interval_multiply(a->im, b->im);
479
+ re_re = interval_multiply(a->re, b->re);
480
+ re_im = interval_multiply(a->re, b->im);
481
+ im_re = interval_multiply(a->im, b->re);
482
+ im_im = interval_multiply(a->im, b->im);
478
483
 
479
- numerator_re = (Interval*)interval_add(re_re, im_im);
480
- numerator_im = (Interval*)interval_subtract(im_re, re_im);
484
+ numerator_re = interval_add(re_re, im_im);
485
+ numerator_im = interval_subtract(im_re, re_im);
481
486
 
482
- re = (Interval*)interval_divide(numerator_re, denominator);
483
- im = (Interval*)interval_divide(numerator_im, denominator);
487
+ re = interval_divide(numerator_re, denominator);
488
+ im = interval_divide(numerator_im, denominator);
484
489
 
485
490
  interval_free(re_re);
486
491
  interval_free(re_im);
@@ -494,7 +499,7 @@ Complex* complex_divide (Complex* a, Complex* b)
494
499
  interval_free(denominator_im);
495
500
  interval_free(denominator);
496
501
 
497
- return (Complex*)complex_new(re, im);
502
+ return complex_new(re, im);
498
503
  }
499
504
 
500
505
  /*
@@ -505,10 +510,10 @@ Complex* complex_modulo (Complex* a, Complex* b)
505
510
  Interval* re;
506
511
  Interval* im;
507
512
 
508
- re = (Interval*)interval_zero();
509
- im = (Interval*)interval_zero();
513
+ re = interval_zero();
514
+ im = interval_zero();
510
515
 
511
- return (Complex*)complex_new(re, im);
516
+ return complex_new(re, im);
512
517
  }
513
518
 
514
519
  /*
@@ -553,7 +558,7 @@ Complex* complex_abs (Complex* complex)
553
558
  ul_mpc_ternary = mpc_abs(tmp_abs_ul_re, tmp_abs_ul, MPC_RNDUD);
554
559
  uu_mpc_ternary = mpc_abs(tmp_abs_uu_re, tmp_abs_uu, MPC_RNDUU);
555
560
 
556
- bounds = (Bounds*)bounds_new();
561
+ bounds = bounds_new();
557
562
  bounds_update_re(bounds, tmp_abs_ll_re, complex->re->L, MPC_INEX_RE(ll_mpc_ternary) == 0);
558
563
  bounds_update_re(bounds, tmp_abs_lu_re, complex->re->L, MPC_INEX_RE(lu_mpc_ternary) == 0);
559
564
  bounds_update_re(bounds, tmp_abs_ul_re, complex->re->R, MPC_INEX_RE(ul_mpc_ternary) == 0);
@@ -561,8 +566,8 @@ Complex* complex_abs (Complex* complex)
561
566
 
562
567
  if (interval_span_zero_p(complex->im))
563
568
  {
564
- l_abs = (Real*)real_abs(complex->re->l);
565
- u_abs = (Real*)real_abs(complex->re->u);
569
+ l_abs = real_abs(complex->re->l);
570
+ u_abs = real_abs(complex->re->u);
566
571
 
567
572
  mpfr_set_r(tmp_abs_re_abs, real_lt_p(l_abs, u_abs) ? l_abs : u_abs);
568
573
  bounds_update_re(bounds, tmp_abs_re_abs, true, true);
@@ -573,8 +578,8 @@ Complex* complex_abs (Complex* complex)
573
578
 
574
579
  if (interval_span_zero_p(complex->re))
575
580
  {
576
- l_abs = (Real*)real_abs(complex->im->l);
577
- u_abs = (Real*)real_abs(complex->im->u);
581
+ l_abs = real_abs(complex->im->l);
582
+ u_abs = real_abs(complex->im->u);
578
583
 
579
584
  mpfr_set_r(tmp_abs_im_abs, real_lt_p(l_abs, u_abs) ? l_abs : u_abs);
580
585
  bounds_update_re(bounds, tmp_abs_im_abs, true, true);
@@ -589,11 +594,11 @@ Complex* complex_abs (Complex* complex)
589
594
  bounds_update_re(bounds, tmp_abs_zero, true, true);
590
595
  }
591
596
 
592
- re = (Interval*)interval_new(real_from_mpfr(bounds->re_min, ROUND_DOWN), bounds->re_min_closed, real_from_mpfr(tmp_abs_n_re, ROUND_NEAREST), bounds->re_max_closed, real_from_mpfr(bounds->re_max, bounds->re_max_exact ? ROUND_UP : ROUND_UP1));
597
+ re = interval_new(real_from_mpfr(bounds->re_min, ROUND_DOWN), bounds->re_min_closed, real_from_mpfr(tmp_abs_n_re, ROUND_NEAREST), bounds->re_max_closed, real_from_mpfr(bounds->re_max, bounds->re_max_exact ? ROUND_UP : ROUND_UP1));
593
598
 
594
599
  bounds_free(bounds);
595
600
 
596
- return (Complex*)complex_new(re, (Interval*)interval_zero());
601
+ return complex_new(re, interval_zero());
597
602
  }
598
603
 
599
604
  /*
@@ -607,10 +612,10 @@ Complex* complex_area (Complex* complex)
607
612
  Real* area;
608
613
  Complex* result;
609
614
 
610
- re_width = (Real*)real_subtract(complex->re->u, complex->re->l);
611
- im_width = (Real*)real_subtract(complex->im->u, complex->im->l);
612
- area = (Real*)real_multiply(re_width, im_width);
613
- result = (Complex*)complex_from_real(area);
615
+ re_width = real_subtract(complex->re->u, complex->re->l);
616
+ im_width = real_subtract(complex->im->u, complex->im->l);
617
+ area = real_multiply(re_width, im_width);
618
+ result = complex_from_real(area);
614
619
 
615
620
  real_free(re_width);
616
621
  real_free(im_width);
@@ -632,20 +637,19 @@ Complex* complex_diagonal (Complex* complex)
632
637
  Real* im_width2;
633
638
  Real* diag2;
634
639
  Interval* re;
635
- Complex* result;
636
640
 
637
- re_width = (Real*)real_subtract(complex->re->u, complex->re->l);
638
- im_width = (Real*)real_subtract(complex->im->u, complex->im->l);
641
+ re_width = real_subtract(complex->re->u, complex->re->l);
642
+ im_width = real_subtract(complex->im->u, complex->im->l);
639
643
 
640
- re_width2 = (Real*)real_multiply(re_width, re_width);
641
- im_width2 = (Real*)real_multiply(im_width, im_width);
644
+ re_width2 = real_multiply(re_width, re_width);
645
+ im_width2 = real_multiply(im_width, im_width);
642
646
 
643
- diag2 = (Real*)real_add(re_width2, im_width2);
647
+ diag2 = real_add(re_width2, im_width2);
644
648
 
645
649
  mpfr_set_r(tmp_diagonal, diag2);
646
650
  mpfr_ternary = mpfr_sqrt(tmp_diagonal, tmp_diagonal, MPFR_RNDN);
647
651
 
648
- re = (Interval*)interval_new((Real*)real_from_mpfr(tmp_diagonal, ROUND_DOWN), true, (Real*)real_from_mpfr(tmp_diagonal, ROUND_NEAREST), true, (Real*)real_from_mpfr(tmp_diagonal, (mpfr_ternary == 0) ? ROUND_UP : ROUND_UP1));
652
+ re = interval_new(real_from_mpfr(tmp_diagonal, ROUND_DOWN), true, real_from_mpfr(tmp_diagonal, ROUND_NEAREST), true, real_from_mpfr(tmp_diagonal, (mpfr_ternary == 0) ? ROUND_UP : ROUND_UP1));
649
653
 
650
654
  real_free(re_width);
651
655
  real_free(im_width);
@@ -653,7 +657,7 @@ Complex* complex_diagonal (Complex* complex)
653
657
  real_free(im_width2);
654
658
  real_free(diag2);
655
659
 
656
- return (Complex*)complex_new(re, (Interval*)interval_zero());
660
+ return complex_new(re, interval_zero());
657
661
  }
658
662
 
659
663
  /*
@@ -662,7 +666,7 @@ Complex* complex_diagonal (Complex* complex)
662
666
  */
663
667
  Complex* complex_conjugate (Complex* complex)
664
668
  {
665
- return (Complex*)complex_new((Interval*)interval_dup(complex->re), (Interval*)interval_negate(complex->im));
669
+ return complex_new(interval_dup(complex->re), interval_negate(complex->im));
666
670
  }
667
671
 
668
672
  /*
@@ -670,7 +674,7 @@ Complex* complex_conjugate (Complex* complex)
670
674
  */
671
675
  Complex* complex_negate (Complex* complex)
672
676
  {
673
- return (Complex*)complex_new((Interval*)interval_negate(complex->re), (Interval*)interval_negate(complex->im));
677
+ return complex_new(interval_negate(complex->re), interval_negate(complex->im));
674
678
  }
675
679
 
676
680
  /*
@@ -679,7 +683,7 @@ Complex* complex_negate (Complex* complex)
679
683
  */
680
684
  Complex* complex_reflect (Complex* complex)
681
685
  {
682
- return (Complex*)complex_new((Interval*)interval_dup(complex->im), (Interval*)interval_dup(complex->re));
686
+ return complex_new(interval_dup(complex->im), interval_dup(complex->re));
683
687
  }
684
688
 
685
689
  /*
@@ -720,7 +724,7 @@ Complex* complex_sqrt (Complex* complex)
720
724
  ul_mpc_ternary = mpc_sqrt(tmp_sqrt_ul, tmp_sqrt_ul, MPC_RNDUD);
721
725
  uu_mpc_ternary = mpc_sqrt(tmp_sqrt_uu, tmp_sqrt_uu, MPC_RNDUU);
722
726
 
723
- bounds = (Bounds*)bounds_new();
727
+ bounds = bounds_new();
724
728
  bounds_update(bounds, tmp_sqrt_ll, complex->re->L, complex->im->L, ll_mpc_ternary);
725
729
  bounds_update(bounds, tmp_sqrt_lu, complex->re->L, complex->im->R, lu_mpc_ternary);
726
730
  bounds_update(bounds, tmp_sqrt_ul, complex->re->R, complex->im->L, ul_mpc_ternary);
@@ -734,10 +738,10 @@ Complex* complex_sqrt (Complex* complex)
734
738
  bounds_update(bounds, tmp_sqrt_re_sqrt, complex->re->L, true, re_sqrt_mpc_ternary);
735
739
  }
736
740
 
737
- re = (Interval*)interval_new((Real*)real_from_mpfr(bounds->re_min, ROUND_DOWN), bounds->re_min_closed, (Real*)real_from_mpfr(tmp_sqrt_n_re, ROUND_NEAREST), bounds->re_max_closed, (Real*)real_from_mpfr(bounds->re_max, bounds->re_max_exact ? ROUND_UP : ROUND_UP1));
738
- im = (Interval*)interval_new((Real*)real_from_mpfr(bounds->im_min, ROUND_DOWN), bounds->im_min_closed, (Real*)real_from_mpfr(tmp_sqrt_n_im, ROUND_NEAREST), bounds->im_max_closed, (Real*)real_from_mpfr(bounds->im_max, bounds->im_max_exact ? ROUND_UP : ROUND_UP1));
741
+ re = interval_new(real_from_mpfr(bounds->re_min, ROUND_DOWN), bounds->re_min_closed, real_from_mpfr(tmp_sqrt_n_re, ROUND_NEAREST), bounds->re_max_closed, real_from_mpfr(bounds->re_max, bounds->re_max_exact ? ROUND_UP : ROUND_UP1));
742
+ im = interval_new(real_from_mpfr(bounds->im_min, ROUND_DOWN), bounds->im_min_closed, real_from_mpfr(tmp_sqrt_n_im, ROUND_NEAREST), bounds->im_max_closed, real_from_mpfr(bounds->im_max, bounds->im_max_exact ? ROUND_UP : ROUND_UP1));
739
743
 
740
744
  bounds_free(bounds);
741
745
 
742
- return (Complex*)complex_new(re, im);
746
+ return complex_new(re, im);
743
747
  }
@@ -0,0 +1,231 @@
1
+ #include "number.h"
2
+
3
+ Complex* complex_im (Complex* complex)
4
+ {
5
+ return complex_new(interval_dup(complex->im), interval_zero());
6
+ }
7
+
8
+ Complex* complex_im_l (Complex* complex)
9
+ {
10
+ return complex_from_real(complex->im->l);
11
+ }
12
+
13
+ Complex* complex_im_n (Complex* complex)
14
+ {
15
+ return complex_from_real(complex->im->n);
16
+ }
17
+
18
+ Complex* complex_im_u (Complex* complex)
19
+ {
20
+ return complex_from_real(complex->im->u);
21
+ }
22
+
23
+ Complex* complex_im_magnitude (Complex* complex)
24
+ {
25
+ Real* l_abs;
26
+ Real* u_abs;
27
+ Complex* result;
28
+
29
+ l_abs = real_abs(complex->im->l);
30
+ u_abs = real_abs(complex->im->u);
31
+
32
+ result = complex_from_real(real_gt_p(l_abs, u_abs) ? l_abs : u_abs);
33
+
34
+ real_free(l_abs);
35
+ real_free(u_abs);
36
+
37
+ return result;
38
+ }
39
+
40
+ Complex* complex_im_mignitude (Complex* complex)
41
+ {
42
+ Real* l_abs;
43
+ Real* u_abs;
44
+ Real* zero;
45
+ Complex* result;
46
+
47
+ l_abs = real_abs(complex->im->l);
48
+ u_abs = real_abs(complex->im->u);
49
+ zero = real_zero();
50
+
51
+ result = complex_from_real(interval_span_zero_p(complex->im) ? zero : (real_lt_p(l_abs, u_abs) ? l_abs : u_abs));
52
+
53
+ real_free(l_abs);
54
+ real_free(u_abs);
55
+ real_free(zero);
56
+
57
+ return result;
58
+ }
59
+
60
+ Complex* complex_im_width (Complex* complex)
61
+ {
62
+ Real* width;
63
+ Complex* result;
64
+
65
+ width = real_subtract(complex->im->u, complex->im->l);
66
+ result = complex_from_real(width);
67
+
68
+ real_free(width);
69
+
70
+ return result;
71
+ }
72
+
73
+ Complex* complex_re (Complex* complex)
74
+ {
75
+ return complex_new(interval_dup(complex->re), interval_zero());
76
+ }
77
+
78
+ Complex* complex_re_l (Complex* complex)
79
+ {
80
+ return complex_from_real(complex->re->l);
81
+ }
82
+
83
+ Complex* complex_re_n (Complex* complex)
84
+ {
85
+ return complex_from_real(complex->re->n);
86
+ }
87
+
88
+ Complex* complex_re_u (Complex* complex)
89
+ {
90
+ return complex_from_real(complex->re->u);
91
+ }
92
+
93
+ Complex* complex_re_magnitude (Complex* complex)
94
+ {
95
+ Real* l_abs;
96
+ Real* u_abs;
97
+ Complex* result;
98
+
99
+ l_abs = real_abs(complex->re->l);
100
+ u_abs = real_abs(complex->re->u);
101
+
102
+ result = complex_from_real(real_gt_p(l_abs, u_abs) ? l_abs : u_abs);
103
+
104
+ real_free(l_abs);
105
+ real_free(u_abs);
106
+
107
+ return result;
108
+ }
109
+
110
+ Complex* complex_re_mignitude (Complex* complex)
111
+ {
112
+ Real* l_abs;
113
+ Real* u_abs;
114
+ Real* zero;
115
+ Complex* result;
116
+
117
+ l_abs = real_abs(complex->re->l);
118
+ u_abs = real_abs(complex->re->u);
119
+ zero = real_zero();
120
+
121
+ result = complex_from_real(interval_span_zero_p(complex->re) ? zero : (real_lt_p(l_abs, u_abs) ? l_abs : u_abs));
122
+
123
+ real_free(l_abs);
124
+ real_free(u_abs);
125
+ real_free(zero);
126
+
127
+ return result;
128
+ }
129
+
130
+ Complex* complex_re_width (Complex* complex)
131
+ {
132
+ Real* width;
133
+ Complex* result;
134
+
135
+ width = real_subtract(complex->re->u, complex->re->l);
136
+ result = complex_from_real(width);
137
+
138
+ real_free(width);
139
+
140
+ return result;
141
+ }
142
+
143
+ Complex* complex_ll (Complex* complex)
144
+ {
145
+ return complex_new(interval_from_real(complex->re->l), interval_from_real(complex->im->l));
146
+ }
147
+
148
+ Complex* complex_lu (Complex* complex)
149
+ {
150
+ return complex_new(interval_from_real(complex->re->l), interval_from_real(complex->im->u));
151
+ }
152
+
153
+ Complex* complex_n (Complex* complex)
154
+ {
155
+ return complex_new(interval_from_real(complex->re->n), interval_from_real(complex->im->n));
156
+ }
157
+
158
+ Complex* complex_ul (Complex* complex)
159
+ {
160
+ return complex_new(interval_from_real(complex->re->u), interval_from_real(complex->im->l));
161
+ }
162
+
163
+ Complex* complex_uu (Complex* complex)
164
+ {
165
+ return complex_new(interval_from_real(complex->re->u), interval_from_real(complex->im->u));
166
+ }
167
+
168
+ Complex* complex_magnitude (Complex* complex)
169
+ {
170
+ Real* re_l_abs;
171
+ Real* re_u_abs;
172
+ Real* im_l_abs;
173
+ Real* im_u_abs;
174
+ Complex* result;
175
+
176
+ re_l_abs = real_abs(complex->re->l);
177
+ re_u_abs = real_abs(complex->re->u);
178
+ im_l_abs = real_abs(complex->im->l);
179
+ im_u_abs = real_abs(complex->im->u);
180
+
181
+ result = complex_new(interval_from_real(real_gt_p(re_l_abs, re_u_abs) ? re_l_abs : re_u_abs), interval_from_real(real_gt_p(im_l_abs, im_u_abs) ? im_l_abs : im_u_abs));
182
+
183
+ real_free(re_l_abs);
184
+ real_free(re_u_abs);
185
+ real_free(im_l_abs);
186
+ real_free(im_u_abs);
187
+
188
+ return result;
189
+ }
190
+
191
+ Complex* complex_mignitude (Complex* complex)
192
+ {
193
+ Real* re_l_abs;
194
+ Real* re_u_abs;
195
+ Real* im_l_abs;
196
+ Real* im_u_abs;
197
+ Real* zero;
198
+ Complex* result;
199
+
200
+ re_l_abs = real_abs(complex->re->l);
201
+ re_u_abs = real_abs(complex->re->u);
202
+ im_l_abs = real_abs(complex->im->l);
203
+ im_u_abs = real_abs(complex->im->u);
204
+
205
+ zero = real_zero();
206
+ result = complex_new(interval_from_real(interval_span_zero_p(complex->re) ? zero : (real_lt_p(re_l_abs, re_u_abs) ? re_l_abs : re_u_abs)), interval_from_real(interval_span_zero_p(complex->im) ? zero : (real_lt_p(im_l_abs, im_u_abs) ? im_l_abs : im_u_abs)));
207
+
208
+ real_free(re_l_abs);
209
+ real_free(re_u_abs);
210
+ real_free(im_l_abs);
211
+ real_free(im_u_abs);
212
+ real_free(zero);
213
+
214
+ return result;
215
+ }
216
+
217
+ Complex* complex_width (Complex* complex)
218
+ {
219
+ Real* re_width;
220
+ Real* im_width;
221
+ Complex* result;
222
+
223
+ re_width = real_subtract(complex->re->u, complex->re->l);
224
+ im_width = real_subtract(complex->im->u, complex->im->l);
225
+ result = complex_new(interval_from_real(re_width), interval_from_real(im_width));
226
+
227
+ real_free(re_width);
228
+ real_free(im_width);
229
+
230
+ return result;
231
+ }