/* * The Spar Library - modular math parser * Copyright (C) 2000,2001 Davide Angelocola * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * */ #include #include #include sl_complex sl_complex_asinh (sl_complex z) { sl_complex u; SL_COMPLEX_RE (u) = 1.; SL_COMPLEX_IM (u) = 0.; u = sl_complex_sqrt (sl_complex_add (u, sl_complex_mul (z, z))); SL_COMPLEX_RE (u) += SL_COMPLEX_RE (z); SL_COMPLEX_IM (u) += SL_COMPLEX_IM (z); return sl_complex_log (u); } sl_complex sl_complex_acosh (sl_complex z) { sl_complex u; int kf; if (SL_IS_ZERO (SL_COMPLEX_IM (z)) && SL_COMPLEX_RE (z) < -1.) kf = 1; else kf = 0; SL_COMPLEX_RE (u) = 1.; SL_COMPLEX_IM (u) = 0.; u = sl_complex_sqrt (sl_complex_sub (sl_complex_mul (z, z), u)); SL_COMPLEX_RE (z) -= SL_COMPLEX_RE (u); SL_COMPLEX_IM (z) += SL_COMPLEX_IM (u); z = sl_complex_log (z); if (SL_IS_NEGATIVE(SL_COMPLEX_RE (z))) { SL_COMPLEX_RE (z) = -SL_COMPLEX_RE (z); SL_COMPLEX_IM (z) = -SL_COMPLEX_IM (z); } if (kf) SL_COMPLEX_IM (z) = -SL_COMPLEX_IM (z); return z; } sl_complex sl_complex_atanh (sl_complex z) { sl_complex u; SL_COMPLEX_RE (z) = 1.; SL_COMPLEX_IM (z) = 0.; u = sl_complex_div (sl_complex_add (u, z), sl_complex_sub (u, z)); u = sl_complex_mul_real (sl_complex_log (u), .5); return u; }