Mercurial > octave
comparison liboctave/numeric/lo-mappers.cc @ 21231:5f318c8ec634
eliminate feature tests from lo-specfun.h
* lo-specfun.h, lo-specfun.cc (xacosh, xasinh, xatanh, xerf, xerfc
xexpm1, xlog1p, xcbrt): Rename to have 'x' prefix. Conditionally
define in .cc file. Change all uses Move complex versions of acosh,
asinh, and atanh functions here.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 09 Feb 2016 04:15:50 -0500 |
parents | f7121e111991 |
children | b8cf410b5c88 |
comparison
equal
deleted
inserted
replaced
21230:721539013db4 | 21231:5f318c8ec634 |
---|---|
193 | 193 |
194 return -i * log (x + i * sqrt (tmp)); | 194 return -i * log (x + i * sqrt (tmp)); |
195 } | 195 } |
196 | 196 |
197 Complex | 197 Complex |
198 acosh (const Complex& x) | |
199 { | |
200 return log (x + sqrt (x + 1.0) * sqrt (x - 1.0)); | |
201 } | |
202 | |
203 Complex | |
204 asin (const Complex& x) | 198 asin (const Complex& x) |
205 { | 199 { |
206 static Complex i (0, 1); | 200 static Complex i (0, 1); |
207 | 201 |
208 Complex tmp; | 202 Complex tmp; |
220 | 214 |
221 return -i * log (i*x + sqrt (tmp)); | 215 return -i * log (i*x + sqrt (tmp)); |
222 } | 216 } |
223 | 217 |
224 Complex | 218 Complex |
225 asinh (const Complex& x) | |
226 { | |
227 return log (x + sqrt (x*x + 1.0)); | |
228 } | |
229 | |
230 Complex | |
231 atan (const Complex& x) | 219 atan (const Complex& x) |
232 { | 220 { |
233 static Complex i (0, 1); | 221 static Complex i (0, 1); |
234 | 222 |
235 return i * log ((i + x) / (i - x)) / 2.0; | 223 return i * log ((i + x) / (i - x)) / 2.0; |
236 } | |
237 | |
238 Complex | |
239 atanh (const Complex& x) | |
240 { | |
241 return log ((1.0 + x) / (1.0 - x)) / 2.0; | |
242 } | 224 } |
243 | 225 |
244 // complex -> bool mappers. | 226 // complex -> bool mappers. |
245 | 227 |
246 bool | 228 bool |
430 | 412 |
431 return -i * log (x + i * sqrt (tmp)); | 413 return -i * log (x + i * sqrt (tmp)); |
432 } | 414 } |
433 | 415 |
434 FloatComplex | 416 FloatComplex |
435 acosh (const FloatComplex& x) | |
436 { | |
437 return log (x + sqrt (x + 1.0f) * sqrt (x - 1.0f)); | |
438 } | |
439 | |
440 FloatComplex | |
441 asin (const FloatComplex& x) | 417 asin (const FloatComplex& x) |
442 { | 418 { |
443 static FloatComplex i (0, 1); | 419 static FloatComplex i (0, 1); |
444 | 420 |
445 FloatComplex tmp; | 421 FloatComplex tmp; |
457 | 433 |
458 return -i * log (i*x + sqrt (tmp)); | 434 return -i * log (i*x + sqrt (tmp)); |
459 } | 435 } |
460 | 436 |
461 FloatComplex | 437 FloatComplex |
462 asinh (const FloatComplex& x) | |
463 { | |
464 return log (x + sqrt (x*x + 1.0f)); | |
465 } | |
466 | |
467 FloatComplex | |
468 atan (const FloatComplex& x) | 438 atan (const FloatComplex& x) |
469 { | 439 { |
470 static FloatComplex i (0, 1); | 440 static FloatComplex i (0, 1); |
471 | 441 |
472 return i * log ((i + x) / (i - x)) / 2.0f; | 442 return i * log ((i + x) / (i - x)) / 2.0f; |
473 } | 443 } |
474 | 444 |
475 FloatComplex | |
476 atanh (const FloatComplex& x) | |
477 { | |
478 return log ((1.0f + x) / (1.0f - x)) / 2.0f; | |
479 } | |
480 | |
481 // complex -> bool mappers. | 445 // complex -> bool mappers. |
482 | 446 |
483 bool | 447 bool |
484 octave_is_NA (const FloatComplex& x) | 448 octave_is_NA (const FloatComplex& x) |
485 { | 449 { |
521 } | 485 } |
522 | 486 |
523 Complex | 487 Complex |
524 rc_acosh (double x) | 488 rc_acosh (double x) |
525 { | 489 { |
526 return x < 1.0 ? acosh (Complex (x)) : Complex (acosh (x)); | 490 return x < 1.0 ? xacosh (Complex (x)) : Complex (xacosh (x)); |
527 } | 491 } |
528 | 492 |
529 FloatComplex | 493 FloatComplex |
530 rc_acosh (float x) | 494 rc_acosh (float x) |
531 { | 495 { |
532 return x < 1.0f ? acosh (FloatComplex (x)) : FloatComplex (acoshf (x)); | 496 return x < 1.0f ? xacosh (FloatComplex (x)) : FloatComplex (xacosh (x)); |
533 } | 497 } |
534 | 498 |
535 Complex | 499 Complex |
536 rc_asin (double x) | 500 rc_asin (double x) |
537 { | 501 { |
545 } | 509 } |
546 | 510 |
547 Complex | 511 Complex |
548 rc_atanh (double x) | 512 rc_atanh (double x) |
549 { | 513 { |
550 return fabs (x) > 1.0 ? atanh (Complex (x)) : Complex (atanh (x)); | 514 return fabs (x) > 1.0 ? xatanh (Complex (x)) : Complex (xatanh (x)); |
551 } | 515 } |
552 | 516 |
553 FloatComplex | 517 FloatComplex |
554 rc_atanh (float x) | 518 rc_atanh (float x) |
555 { | 519 { |
556 return fabsf (x) > 1.0f ? atanh (FloatComplex (x)) | 520 return fabsf (x) > 1.0f ? xatanh (FloatComplex (x)) |
557 : FloatComplex (atanhf (x)); | 521 : FloatComplex (xatanh (x)); |
558 } | 522 } |
559 | 523 |
560 Complex | 524 Complex |
561 rc_log (double x) | 525 rc_log (double x) |
562 { | 526 { |