comparison liboctave/lo-mappers.cc @ 8998:a48fba01e4ac

optimize isnan/isinf/isfinite mappers
author Jaroslav Hajek <highegg@gmail.com>
date Thu, 19 Mar 2009 17:46:38 +0100
parents eb63fbe60fab
children 0d9178575dd7
comparison
equal deleted inserted replaced
8997:187a9d9c2f04 8998:a48fba01e4ac
188 return (exp == 0) ? x : (x / ax) * lax; 188 return (exp == 0) ? x : (x / ax) * lax;
189 } 189 }
190 190
191 // double -> bool mappers. 191 // double -> bool mappers.
192 192
193 #if ! defined(HAVE_CMATH_ISNAN)
193 bool 194 bool
194 xisnan (double x) 195 xisnan (double x)
195 { 196 {
196 return lo_ieee_isnan (x); 197 return lo_ieee_isnan (x);
197 } 198 }
198 199 #endif
200
201 #if ! defined(HAVE_CMATH_ISFINITE)
199 bool 202 bool
200 xfinite (double x) 203 xfinite (double x)
201 { 204 {
202 return lo_ieee_finite (x); 205 return lo_ieee_finite (x);
203 } 206 }
204 207 #endif
208
209 #if ! defined(HAVE_CMATH_ISINF)
205 bool 210 bool
206 xisinf (double x) 211 xisinf (double x)
207 { 212 {
208 return lo_ieee_isinf (x); 213 return lo_ieee_isinf (x);
209 } 214 }
215 #endif
210 216
211 bool 217 bool
212 octave_is_NA (double x) 218 octave_is_NA (double x)
213 { 219 {
214 return lo_ieee_is_NA (x); 220 return lo_ieee_is_NA (x);
317 323
318 return tmp == 0 ? 0.0 : x / tmp; 324 return tmp == 0 ? 0.0 : x / tmp;
319 } 325 }
320 326
321 // complex -> bool mappers. 327 // complex -> bool mappers.
322
323 bool
324 xisnan (const Complex& x)
325 {
326 return (xisnan (real (x)) || xisnan (imag (x)));
327 }
328
329 bool
330 xfinite (const Complex& x)
331 {
332 double rx = real (x);
333 double ix = imag (x);
334
335 return (xfinite (rx) && ! xisnan (rx)
336 && xfinite (ix) && ! xisnan (ix));
337 }
338
339 bool
340 xisinf (const Complex& x)
341 {
342 return (xisinf (real (x)) || xisinf (imag (x)));
343 }
344 328
345 bool 329 bool
346 octave_is_NA (const Complex& x) 330 octave_is_NA (const Complex& x)
347 { 331 {
348 return (octave_is_NA (real (x)) || octave_is_NA (imag (x))); 332 return (octave_is_NA (real (x)) || octave_is_NA (imag (x)));
522 return (exp == 0) ? x : (x / ax) * lax; 506 return (exp == 0) ? x : (x / ax) * lax;
523 } 507 }
524 508
525 // float -> bool mappers. 509 // float -> bool mappers.
526 510
511 #if ! defined(HAVE_CMATH_ISNANF)
527 bool 512 bool
528 xisnan (float x) 513 xisnan (float x)
529 { 514 {
530 return lo_ieee_isnan (x); 515 return lo_ieee_isnan (x);
531 } 516 }
532 517 #endif
518
519 #if ! defined(HAVE_CMATH_ISFINITEF)
533 bool 520 bool
534 xfinite (float x) 521 xfinite (float x)
535 { 522 {
536 return lo_ieee_finite (x); 523 return lo_ieee_finite (x);
537 } 524 }
538 525 #endif
526
527 #if ! defined(HAVE_CMATH_ISINFF)
539 bool 528 bool
540 xisinf (float x) 529 xisinf (float x)
541 { 530 {
542 return lo_ieee_isinf (x); 531 return lo_ieee_isinf (x);
543 } 532 }
533 #endif
544 534
545 bool 535 bool
546 octave_is_NA (float x) 536 octave_is_NA (float x)
547 { 537 {
548 return lo_ieee_is_NA (x); 538 return lo_ieee_is_NA (x);
651 641
652 return tmp == 0 ? 0.0 : x / tmp; 642 return tmp == 0 ? 0.0 : x / tmp;
653 } 643 }
654 644
655 // complex -> bool mappers. 645 // complex -> bool mappers.
656
657 bool
658 xisnan (const FloatComplex& x)
659 {
660 return (xisnan (real (x)) || xisnan (imag (x)));
661 }
662
663 bool
664 xfinite (const FloatComplex& x)
665 {
666 float rx = real (x);
667 float ix = imag (x);
668
669 return (xfinite (rx) && ! xisnan (rx)
670 && xfinite (ix) && ! xisnan (ix));
671 }
672
673 bool
674 xisinf (const FloatComplex& x)
675 {
676 return (xisinf (real (x)) || xisinf (imag (x)));
677 }
678 646
679 bool 647 bool
680 octave_is_NA (const FloatComplex& x) 648 octave_is_NA (const FloatComplex& x)
681 { 649 {
682 return (octave_is_NA (real (x)) || octave_is_NA (imag (x))); 650 return (octave_is_NA (real (x)) || octave_is_NA (imag (x)));