Mercurial > octave-nkf
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))); |