number 0.9.9 → 0.9.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,230 +2,293 @@
2
2
 
3
3
  Complex* complex_im (Complex* complex)
4
4
  {
5
- return complex_new(interval_dup(complex->im), interval_zero());
5
+ Interval* re = interval_dup(complex->im);
6
+ Interval* im = interval_zero();
7
+
8
+ return complex_new(re, im);
6
9
  }
7
10
 
8
11
  Complex* complex_im_l (Complex* complex)
9
12
  {
10
- return complex_from_real(complex->im->l);
13
+ Real* real = real_dup(complex->im->l);
14
+ return complex_from_real(real);
11
15
  }
12
16
 
13
17
  Complex* complex_im_n (Complex* complex)
14
18
  {
15
- return complex_from_real(complex->im->n);
19
+ Real* real = real_dup(complex->im->n);
20
+ return complex_from_real(real);
16
21
  }
17
22
 
18
23
  Complex* complex_im_u (Complex* complex)
19
24
  {
20
- return complex_from_real(complex->im->u);
25
+ Real* real = real_dup(complex->im->u);
26
+ return complex_from_real(real);
21
27
  }
22
28
 
23
29
  Complex* complex_im_magnitude (Complex* complex)
24
30
  {
25
- Real* l_abs;
26
- Real* u_abs;
27
31
  Complex* result;
28
32
 
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
+ Real* l_abs = real_abs(complex->im->l);
34
+ Real* u_abs = real_abs(complex->im->u);
33
35
 
34
- real_free(l_abs);
35
- real_free(u_abs);
36
+ if (real_gt_p(l_abs, u_abs))
37
+ {
38
+ result = complex_from_real(l_abs);
39
+ real_free(u_abs);
40
+ }
41
+ else
42
+ {
43
+ result = complex_from_real(u_abs);
44
+ real_free(l_abs);
45
+ }
36
46
 
37
47
  return result;
38
48
  }
39
49
 
40
50
  Complex* complex_im_mignitude (Complex* complex)
41
51
  {
42
- Real* l_abs;
43
- Real* u_abs;
44
- Real* zero;
45
52
  Complex* result;
46
53
 
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);
54
+ Real* l_abs = real_abs(complex->im->l);
55
+ Real* u_abs = real_abs(complex->im->u);
56
+
57
+ if (interval_span_zero_p(complex->im))
58
+ {
59
+ result = complex_zero();
60
+ real_free(l_abs);
61
+ real_free(u_abs);
62
+ }
63
+ else if (real_lt_p(l_abs, u_abs))
64
+ {
65
+ result = complex_from_real(l_abs);
66
+ real_free(u_abs);
67
+ }
68
+ else
69
+ {
70
+ result = complex_from_real(u_abs);
71
+ real_free(l_abs);
72
+ }
56
73
 
57
74
  return result;
58
75
  }
59
76
 
60
77
  Complex* complex_im_width (Complex* complex)
61
78
  {
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;
79
+ Real* real = real_subtract(complex->im->u, complex->im->l);
80
+ return complex_from_real(real);
71
81
  }
72
82
 
73
83
  Complex* complex_re (Complex* complex)
74
84
  {
75
- return complex_new(interval_dup(complex->re), interval_zero());
85
+ Interval* re = interval_dup(complex->re);
86
+ Interval* im = interval_zero();
87
+
88
+ return complex_new(re, im);
76
89
  }
77
90
 
78
91
  Complex* complex_re_l (Complex* complex)
79
92
  {
80
- return complex_from_real(complex->re->l);
93
+ Real* real = real_dup(complex->re->l);
94
+ return complex_from_real(real);
81
95
  }
82
96
 
83
97
  Complex* complex_re_n (Complex* complex)
84
98
  {
85
- return complex_from_real(complex->re->n);
99
+ Real* real = real_dup(complex->re->n);
100
+ return complex_from_real(real);
86
101
  }
87
102
 
88
103
  Complex* complex_re_u (Complex* complex)
89
104
  {
90
- return complex_from_real(complex->re->u);
105
+ Real* real = real_dup(complex->re->u);
106
+ return complex_from_real(real);
91
107
  }
92
108
 
93
109
  Complex* complex_re_magnitude (Complex* complex)
94
110
  {
95
- Real* l_abs;
96
- Real* u_abs;
97
111
  Complex* result;
98
112
 
99
- l_abs = real_abs(complex->re->l);
100
- u_abs = real_abs(complex->re->u);
113
+ Real* l_abs = real_abs(complex->re->l);
114
+ Real* u_abs = real_abs(complex->re->u);
101
115
 
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);
116
+ if (real_gt_p(l_abs, u_abs))
117
+ {
118
+ result = complex_from_real(l_abs);
119
+ real_free(u_abs);
120
+ }
121
+ else
122
+ {
123
+ result = complex_from_real(u_abs);
124
+ real_free(l_abs);
125
+ }
106
126
 
107
127
  return result;
108
128
  }
109
129
 
110
130
  Complex* complex_re_mignitude (Complex* complex)
111
131
  {
112
- Real* l_abs;
113
- Real* u_abs;
114
- Real* zero;
115
132
  Complex* result;
116
133
 
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);
134
+ Real* l_abs = real_abs(complex->re->l);
135
+ Real* u_abs = real_abs(complex->re->u);
136
+
137
+ if (interval_span_zero_p(complex->re))
138
+ {
139
+ result = complex_zero();
140
+ real_free(l_abs);
141
+ real_free(u_abs);
142
+ }
143
+ else if (real_lt_p(l_abs, u_abs))
144
+ {
145
+ result = complex_from_real(l_abs);
146
+ real_free(u_abs);
147
+ }
148
+ else
149
+ {
150
+ result = complex_from_real(u_abs);
151
+ real_free(l_abs);
152
+ }
126
153
 
127
154
  return result;
128
155
  }
129
156
 
130
157
  Complex* complex_re_width (Complex* complex)
131
158
  {
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;
159
+ Real* real = real_subtract(complex->re->u, complex->re->l);
160
+ return complex_from_real(real);
141
161
  }
142
162
 
143
163
  Complex* complex_ll (Complex* complex)
144
164
  {
145
- return complex_new(interval_from_real(complex->re->l), interval_from_real(complex->im->l));
165
+ Interval* re = interval_from_real(complex->re->l);
166
+ Interval* im = interval_from_real(complex->im->l);
167
+
168
+ return complex_new(re, im);
146
169
  }
147
170
 
148
171
  Complex* complex_lu (Complex* complex)
149
172
  {
150
- return complex_new(interval_from_real(complex->re->l), interval_from_real(complex->im->u));
173
+ Interval* re = interval_from_real(complex->re->l);
174
+ Interval* im = interval_from_real(complex->im->u);
175
+
176
+ return complex_new(re, im);
151
177
  }
152
178
 
153
179
  Complex* complex_n (Complex* complex)
154
180
  {
155
- return complex_new(interval_from_real(complex->re->n), interval_from_real(complex->im->n));
181
+ Interval* re = interval_from_real(complex->re->n);
182
+ Interval* im = interval_from_real(complex->im->n);
183
+
184
+ return complex_new(re, im);
156
185
  }
157
186
 
158
187
  Complex* complex_ul (Complex* complex)
159
188
  {
160
- return complex_new(interval_from_real(complex->re->u), interval_from_real(complex->im->l));
189
+ Interval* re = interval_from_real(complex->re->u);
190
+ Interval* im = interval_from_real(complex->im->l);
191
+
192
+ return complex_new(re, im);
161
193
  }
162
194
 
163
195
  Complex* complex_uu (Complex* complex)
164
196
  {
165
- return complex_new(interval_from_real(complex->re->u), interval_from_real(complex->im->u));
197
+ Interval* re = interval_from_real(complex->re->u);
198
+ Interval* im = interval_from_real(complex->im->u);
199
+
200
+ return complex_new(re, im);
166
201
  }
167
202
 
168
203
  Complex* complex_magnitude (Complex* complex)
169
204
  {
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;
205
+ Interval* re;
206
+ Interval* im;
207
+
208
+ Real* re_l_abs = real_abs(complex->re->l);
209
+ Real* re_u_abs = real_abs(complex->re->u);
210
+ Real* im_l_abs = real_abs(complex->im->l);
211
+ Real* im_u_abs = real_abs(complex->im->u);
212
+
213
+ if (real_gt_p(re_l_abs, re_u_abs))
214
+ {
215
+ re = interval_from_real(re_l_abs);
216
+ real_free(re_u_abs);
217
+ }
218
+ else
219
+ {
220
+ re = interval_from_real(re_u_abs);
221
+ real_free(re_l_abs);
222
+ }
223
+
224
+ if (real_gt_p(im_l_abs, im_u_abs))
225
+ {
226
+ im = interval_from_real(im_l_abs);
227
+ real_free(im_u_abs);
228
+ }
229
+ else
230
+ {
231
+ im = interval_from_real(im_u_abs);
232
+ real_free(im_l_abs);
233
+ }
234
+
235
+ return complex_new(re, im);
189
236
  }
190
237
 
191
238
  Complex* complex_mignitude (Complex* complex)
192
239
  {
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;
240
+ Interval* re;
241
+ Interval* im;
242
+
243
+ Real* re_l_abs = real_abs(complex->re->l);
244
+ Real* re_u_abs = real_abs(complex->re->u);
245
+ Real* im_l_abs = real_abs(complex->im->l);
246
+ Real* im_u_abs = real_abs(complex->im->u);
247
+
248
+ if (interval_span_zero_p(complex->re))
249
+ {
250
+ re = interval_zero();
251
+ real_free(re_l_abs);
252
+ real_free(re_u_abs);
253
+ }
254
+ else if (real_lt_p(re_l_abs, re_u_abs))
255
+ {
256
+ re = interval_from_real(re_l_abs);
257
+ real_free(re_u_abs);
258
+ }
259
+ else
260
+ {
261
+ re = interval_from_real(re_u_abs);
262
+ real_free(re_l_abs);
263
+ }
264
+
265
+ if (interval_span_zero_p(complex->im))
266
+ {
267
+ im = interval_zero();
268
+ real_free(im_l_abs);
269
+ real_free(im_u_abs);
270
+ }
271
+ else if (real_lt_p(im_l_abs, im_u_abs))
272
+ {
273
+ im = interval_from_real(im_l_abs);
274
+ real_free(im_u_abs);
275
+ }
276
+ else
277
+ {
278
+ im = interval_from_real(im_u_abs);
279
+ real_free(im_l_abs);
280
+ }
281
+
282
+ return complex_new(re, im);
215
283
  }
216
284
 
217
285
  Complex* complex_width (Complex* complex)
218
286
  {
219
- Real* re_width;
220
- Real* im_width;
221
- Complex* result;
287
+ Real* re_width = real_subtract(complex->re->u, complex->re->l);
288
+ Real* im_width = real_subtract(complex->im->u, complex->im->l);
222
289
 
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));
290
+ Interval* re = interval_from_real(re_width);
291
+ Interval* im = interval_from_real(im_width);
226
292
 
227
- real_free(re_width);
228
- real_free(im_width);
229
-
230
- return result;
293
+ return complex_new(re, im);
231
294
  }
@@ -75,11 +75,8 @@ int interval_span_p (Interval* interval, Real* real)
75
75
  */
76
76
  int interval_span_zero_p (Interval* interval)
77
77
  {
78
- int result;
79
- Real* zero;
80
-
81
- zero = real_zero();
82
- result = interval_span_p(interval, zero);
78
+ Real* zero = real_zero();
79
+ int result = interval_span_p(interval, zero);
83
80
 
84
81
  real_free(zero);
85
82
 
@@ -91,15 +88,7 @@ int interval_span_zero_p (Interval* interval)
91
88
  */
92
89
  int interval_zero_p (Interval* interval)
93
90
  {
94
- int result;
95
- Real* zero;
96
-
97
- zero = real_zero();
98
- result = real_eq_p(interval->l, zero) && real_eq_p(interval->u, zero);
99
-
100
- real_free(zero);
101
-
102
- return result;
91
+ return ZERO(interval->l) && ZERO(interval->u);
103
92
  }
104
93
 
105
94
  /*
@@ -119,8 +108,7 @@ int interval_degenerate_p (Interval* interval)
119
108
  */
120
109
  Interval* interval_new (Real* l, int L, Real* n, int R, Real* u)
121
110
  {
122
- Interval* interval;
123
- interval = malloc(sizeof(Interval));
111
+ Interval* interval = malloc(sizeof(Interval));
124
112
 
125
113
  if (interval == NULL)
126
114
  {
@@ -131,25 +119,25 @@ Interval* interval_new (Real* l, int L, Real* n, int R, Real* u)
131
119
 
132
120
  if (NaN(l) || NaN(n) || NaN(u))
133
121
  {
134
- interval->n = real_nan();
135
- interval->l = real_neg_inf();
136
- interval->u = real_pos_inf();
137
-
138
122
  interval->L = true;
139
123
  interval->R = true;
140
124
 
125
+ interval->l = real_neg_inf();
126
+ interval->n = real_nan();
127
+ interval->u = real_pos_inf();
128
+
141
129
  real_free(n);
142
130
  real_free(l);
143
131
  real_free(u);
144
132
  }
145
133
  else
146
134
  {
147
- interval->n = n;
148
- interval->l = l;
149
- interval->u = u;
150
-
151
135
  interval->L = (real_eq_p(l, u) || real_eq_p(n, l) || L);
152
136
  interval->R = (real_eq_p(l, u) || real_eq_p(n, u) || R);
137
+
138
+ interval->l = l;
139
+ interval->n = n;
140
+ interval->u = u;
153
141
  }
154
142
 
155
143
  return interval;
@@ -157,12 +145,14 @@ Interval* interval_new (Real* l, int L, Real* n, int R, Real* u)
157
145
 
158
146
  /*
159
147
  * Returns a pointer to a newly allocated Interval containing only the given
160
- * real. The given real is duplicated before being stored, and therefore must
161
- * be freed separately.
148
+ * real.
162
149
  */
163
150
  Interval* interval_from_real (Real* real)
164
151
  {
165
- return interval_new(real_dup(real), true, real_dup(real), true, real_dup(real));
152
+ Real* l = real_dup(real);
153
+ Real* u = real_dup(real);
154
+
155
+ return interval_new(l, true, real, true, u);
166
156
  }
167
157
 
168
158
  /*
@@ -170,7 +160,11 @@ Interval* interval_from_real (Real* real)
170
160
  */
171
161
  Interval* interval_nan ()
172
162
  {
173
- return interval_new(real_neg_inf(), true, real_nan(), true, real_pos_inf());
163
+ Real* l = real_neg_inf();
164
+ Real* n = real_nan();
165
+ Real* u = real_pos_inf();
166
+
167
+ return interval_new(l, true, n, true, u);
174
168
  }
175
169
 
176
170
  /*
@@ -178,7 +172,7 @@ Interval* interval_nan ()
178
172
  */
179
173
  Interval* interval_pos_inf ()
180
174
  {
181
- return interval_new(real_pos_inf(), true, real_pos_inf(), true, real_pos_inf());
175
+ return interval_from_real(real_pos_inf());
182
176
  }
183
177
 
184
178
  /*
@@ -186,7 +180,7 @@ Interval* interval_pos_inf ()
186
180
  */
187
181
  Interval* interval_neg_inf ()
188
182
  {
189
- return interval_new(real_neg_inf(), true, real_neg_inf(), true, real_neg_inf());
183
+ return interval_from_real(real_neg_inf());
190
184
  }
191
185
 
192
186
  /*
@@ -194,7 +188,7 @@ Interval* interval_neg_inf ()
194
188
  */
195
189
  Interval* interval_zero ()
196
190
  {
197
- return interval_new(real_zero(), true, real_zero(), true, real_zero());
191
+ return interval_from_real(real_zero());
198
192
  }
199
193
 
200
194
  /*
@@ -202,7 +196,7 @@ Interval* interval_zero ()
202
196
  */
203
197
  Interval* interval_one ()
204
198
  {
205
- return interval_new(real_one(), true, real_one(), true, real_one());
199
+ return interval_from_real(real_one());
206
200
  }
207
201
 
208
202
  /*
@@ -211,7 +205,11 @@ Interval* interval_one ()
211
205
  */
212
206
  Interval* interval_pi ()
213
207
  {
214
- return interval_new(real_pi(ROUND_DOWN), false, real_pi(ROUND_NEAREST), false, real_pi(ROUND_UP1));
208
+ Real* l = real_pi(ROUND_DOWN);
209
+ Real* n = real_pi(ROUND_NEAREST);
210
+ Real* u = real_pi(ROUND_UP1);
211
+
212
+ return interval_new(l, false, n, false, u);
215
213
  }
216
214
 
217
215
  /*
@@ -220,7 +218,11 @@ Interval* interval_pi ()
220
218
  */
221
219
  Interval* interval_e ()
222
220
  {
223
- return interval_new(real_e(ROUND_DOWN), false, real_e(ROUND_NEAREST), false, real_e(ROUND_UP1));
221
+ Real* l = real_e(ROUND_DOWN);
222
+ Real* n = real_e(ROUND_NEAREST);
223
+ Real* u = real_e(ROUND_UP1);
224
+
225
+ return interval_new(l, false, n, false, u);
224
226
  }
225
227
 
226
228
  /*
@@ -229,7 +231,11 @@ Interval* interval_e ()
229
231
  */
230
232
  Interval* interval_dup (Interval* interval)
231
233
  {
232
- return interval_new(real_dup(interval->l), interval->L, real_dup(interval->n), interval->R, real_dup(interval->u));
234
+ Real* l = real_dup(interval->l);
235
+ Real* n = real_dup(interval->n);
236
+ Real* u = real_dup(interval->u);
237
+
238
+ return interval_new(l, interval->L, n, interval->R, u);
233
239
  }
234
240
 
235
241
  /*
@@ -237,18 +243,12 @@ Interval* interval_dup (Interval* interval)
237
243
  */
238
244
  Interval* interval_add (Interval* a, Interval* b)
239
245
  {
240
- int L;
241
- int R;
242
- Real* n;
243
- Real* l;
244
- Real* u;
245
-
246
- n = real_add(a->n, b->n);
247
- l = real_add(a->l, b->l);
248
- u = real_add(a->u, b->u);
246
+ int L = (a->L && b->L);
247
+ int R = (a->R && b->R);
249
248
 
250
- L = (a->L && b->L);
251
- R = (a->R && b->R);
249
+ Real* l = real_add(a->l, b->l);
250
+ Real* n = real_add(a->n, b->n);
251
+ Real* u = real_add(a->u, b->u);
252
252
 
253
253
  return interval_new(l, L, n, R, u);
254
254
  }
@@ -258,18 +258,12 @@ Interval* interval_add (Interval* a, Interval* b)
258
258
  */
259
259
  Interval* interval_subtract (Interval* a, Interval* b)
260
260
  {
261
- int L;
262
- int R;
263
- Real* n;
264
- Real* l;
265
- Real* u;
261
+ int L = (a->L && b->R);
262
+ int R = (a->R && b->L);
266
263
 
267
- n = real_subtract(a->n, b->n);
268
- l = real_subtract(a->l, b->u);
269
- u = real_subtract(a->u, b->l);
270
-
271
- L = (a->L && b->R);
272
- R = (a->R && b->L);
264
+ Real* l = real_subtract(a->l, b->u);
265
+ Real* n = real_subtract(a->n, b->n);
266
+ Real* u = real_subtract(a->u, b->l);
273
267
 
274
268
  return interval_new(l, L, n, R, u);
275
269
  }
@@ -279,25 +273,19 @@ Interval* interval_subtract (Interval* a, Interval* b)
279
273
  */
280
274
  Interval* interval_multiply (Interval* a, Interval* b)
281
275
  {
282
- int L;
283
- int R;
284
- Real* n;
285
- Real* l;
286
- Real* u;
287
- RealBounds* bounds;
288
-
289
- bounds = real_bounds_new();
276
+ RealBounds* bounds = real_bounds_new();
277
+
290
278
  real_bounds_update(bounds, real_multiply(a->l, b->l), (a->L && b->L));
291
279
  real_bounds_update(bounds, real_multiply(a->l, b->u), (a->L && b->R));
292
280
  real_bounds_update(bounds, real_multiply(a->u, b->l), (a->R && b->L));
293
281
  real_bounds_update(bounds, real_multiply(a->u, b->u), (a->R && b->R));
294
282
 
295
- L = (bounds->min_closed);
296
- R = (bounds->max_closed);
283
+ int L = (bounds->min_closed);
284
+ int R = (bounds->max_closed);
297
285
 
298
- n = real_multiply(a->n, b->n);
299
- l = real_dup(bounds->min);
300
- u = real_dup(bounds->max);
286
+ Real* l = real_dup(bounds->min);
287
+ Real* n = real_multiply(a->n, b->n);
288
+ Real* u = real_dup(bounds->max);
301
289
 
302
290
  real_bounds_free(bounds);
303
291
 
@@ -309,14 +297,8 @@ Interval* interval_multiply (Interval* a, Interval* b)
309
297
  */
310
298
  Interval* interval_divide (Interval* a, Interval* b)
311
299
  {
312
- int L;
313
- int R;
314
- Real* n;
315
- Real* l;
316
- Real* u;
317
- RealBounds* bounds;
318
-
319
- bounds = real_bounds_new();
300
+ RealBounds* bounds = real_bounds_new();
301
+
320
302
  real_bounds_update(bounds, real_divide(a->l, b->l, ROUND_DOWN), (a->L && b->L));
321
303
  real_bounds_update(bounds, real_divide(a->l, b->u, ROUND_DOWN), (a->L && b->R));
322
304
  real_bounds_update(bounds, real_divide(a->u, b->l, ROUND_DOWN), (a->R && b->L));
@@ -326,12 +308,12 @@ Interval* interval_divide (Interval* a, Interval* b)
326
308
  real_bounds_update(bounds, real_divide(a->u, b->l, ROUND_UP), (a->R && b->L));
327
309
  real_bounds_update(bounds, real_divide(a->u, b->u, ROUND_UP), (a->R && b->R));
328
310
 
329
- L = (bounds->min_closed);
330
- R = (bounds->max_closed);
311
+ int L = (bounds->min_closed);
312
+ int R = (bounds->max_closed);
331
313
 
332
- n = real_divide(a->n, b->n, ROUND_NEAREST);
333
- l = real_dup(bounds->min);
334
- u = real_dup(bounds->max);
314
+ Real* l = real_dup(bounds->min);
315
+ Real* n = real_divide(a->n, b->n, ROUND_NEAREST);
316
+ Real* u = real_dup(bounds->max);
335
317
 
336
318
  real_bounds_free(bounds);
337
319
 
@@ -343,7 +325,11 @@ Interval* interval_divide (Interval* a, Interval* b)
343
325
  */
344
326
  Interval* interval_negate (Interval* interval)
345
327
  {
346
- return interval_new(real_negate(interval->u), interval->R, real_negate(interval->n), interval->L, real_negate(interval->l));
328
+ Real* l = real_negate(interval->u);
329
+ Real* n = real_negate(interval->n);
330
+ Real* u = real_negate(interval->l);
331
+
332
+ return interval_new(l, interval->R, n, interval->L, u);
347
333
  }
348
334
 
349
335
  /*
@@ -352,7 +338,11 @@ Interval* interval_negate (Interval* interval)
352
338
  */
353
339
  Interval* interval_round (Interval* interval)
354
340
  {
355
- return interval_new(real_round(interval->l), true, real_round(interval->n), true, real_round(interval->u));
341
+ Real* l = real_round(interval->l);
342
+ Real* n = real_round(interval->n);
343
+ Real* u = real_round(interval->u);
344
+
345
+ return interval_new(l, true, n, true, u);
356
346
  }
357
347
 
358
348
  /*
@@ -362,7 +352,11 @@ Interval* interval_round (Interval* interval)
362
352
  */
363
353
  Interval* interval_round_ceiling (Interval* interval)
364
354
  {
365
- return interval_new(real_ceil(interval->l), true, real_ceil(interval->n), true, real_ceil(interval->u));
355
+ Real* l = real_ceil(interval->l);
356
+ Real* n = real_ceil(interval->n);
357
+ Real* u = real_ceil(interval->u);
358
+
359
+ return interval_new(l, true, n, true, u);
366
360
  }
367
361
 
368
362
  /*
@@ -372,7 +366,11 @@ Interval* interval_round_ceiling (Interval* interval)
372
366
  */
373
367
  Interval* interval_round_floor (Interval* interval)
374
368
  {
375
- return interval_new(real_floor(interval->l), true, real_floor(interval->n), true, real_floor(interval->u));
369
+ Real* l = real_floor(interval->l);
370
+ Real* n = real_floor(interval->n);
371
+ Real* u = real_floor(interval->u);
372
+
373
+ return interval_new(l, true, n, true, u);
376
374
  }
377
375
 
378
376
  /*
@@ -382,7 +380,11 @@ Interval* interval_round_floor (Interval* interval)
382
380
  */
383
381
  Interval* interval_round_infinity (Interval* interval)
384
382
  {
385
- return interval_new(real_round_infinity(interval->l), true, real_round_infinity(interval->n), true, real_round_infinity(interval->u));
383
+ Real* l = real_round_infinity(interval->l);
384
+ Real* n = real_round_infinity(interval->n);
385
+ Real* u = real_round_infinity(interval->u);
386
+
387
+ return interval_new(l, true, n, true, u);
386
388
  }
387
389
 
388
390
  /*
@@ -392,5 +394,9 @@ Interval* interval_round_infinity (Interval* interval)
392
394
  */
393
395
  Interval* interval_round_origin (Interval* interval)
394
396
  {
395
- return interval_new(real_round_origin(interval->l), true, real_round_origin(interval->n), true, real_round_origin(interval->u));
397
+ Real* l = real_round_origin(interval->l);
398
+ Real* n = real_round_origin(interval->n);
399
+ Real* u = real_round_origin(interval->u);
400
+
401
+ return interval_new(l, true, n, true, u);
396
402
  }