1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #include "stdafx.h"
- #include "defs.h"
- void
- eval_arccosh(void)
- {
- push(cadr(p1));
- eval();
- arccosh();
- }
- void
- arccosh(void)
- {
- double d;
- save();
- p1 = pop();
- if (car(p1) == symbol(COSH)) {
- push(cadr(p1));
- restore();
- return;
- }
- if (isdouble(p1)) {
- d = p1->u.d;
- if (d < 1.0)
- stop("arccosh function argument is less than 1.0");
- d = log(d + sqrt(d * d - 1.0));
- push_double(d);
- restore();
- return;
- }
- if (isplusone(p1)) {
- push(zero);
- restore();
- return;
- }
- push_symbol(ARCCOSH);
- push(p1);
- list(2);
- restore();
- }
|