number 0.9.7 → 0.9.9

Sign up to get free protection for your applications and to get access to all the features.
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
+ }