12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // exp(x) - exp(-x)
- // sinh(x) = ----------------
- // 2
- #include "stdafx.h"
- #include "defs.h"
- void
- eval_sinh(void)
- {
- push(cadr(p1));
- eval();
- ysinh();
- }
- void
- ysinh(void)
- {
- save();
- yysinh();
- restore();
- }
- void
- yysinh(void)
- {
- double d;
- p1 = pop();
- if (car(p1) == symbol(ARCSINH)) {
- push(cadr(p1));
- return;
- }
- if (isdouble(p1)) {
- d = sinh(p1->u.d);
- if (fabs(d) < 1e-10)
- d = 0.0;
- push_double(d);
- return;
- }
- if (iszero(p1)) {
- push(zero);
- return;
- }
- push_symbol(SINH);
- push(p1);
- list(2);
- }
- #if SELFTEST
- static char *s[] = {
- "sinh(x)",
- "sinh(x)",
- "sinh(0)",
- "0",
- "sinh(arcsinh(x))",
- "x",
- };
- void
- test_sinh(void)
- {
- test(__FILE__, s, sizeof s / sizeof (char *));
- }
- #endif
|